[gnu.g++.bug] G++ <-> C++ destructor difference

dclemans@mntgfx.mentor.com (Dave Clemans @ APD x1292) (05/27/89)

(This refers to version 1.35.0+ of G++)

The following example compiles fine under C++:
    class xyz
    {
        int     a1;
        int     b2;
        int     c3;
        int     d4;
    
    public:
    
        xyz()
        {
            a1 = 1;
            b2 = 2;
            c3 = 3;
            d4 = 4;
        }
    
        ~xyz()
        {
        }
    
        int a() { return a1; }
        int b() { return b2; }
        int c() { return c3; }
        int d() { return d4; }
    };
    
    xyz testing;
    xyz testing2;
    
    void main()
    {
        xyz onstack;
        int i;
    
        i = testing2.c() + testing.a() + onstack.b();
    }

If I try to compile it under g++, I get...
    [262]$ g++ tt.c
    In method void xyz::~xyz ():
    tt.c:19: parse error at end of input
    tt.c:32: parse error before `{'
    tt.c:32: warning: Old style parameter specification frowned upon
    tt.c:19: parm types given both in parmlist and separately
    tt.c:36: `testing' was not declared (first use this function)
    tt.c:36: (Each undeclared identifier is reported only once
    tt.c:36: for each function it appears in.)

But if the xyz destructor has its implementation moved out of the class
definition, g++ handles it fine.  I.e.
    class xyz
    {
        int     a1;
        int     b2;
        int     c3;
        int     d4;
    
    public:
    
        xyz()
        {
            a1 = 1;
            b2 = 2;
            c3 = 3;
            d4 = 4;
        }
    
        ~xyz();
    
        int a() { return a1; }
        int b() { return b2; }
        int c() { return c3; }
        int d() { return d4; }
    };
    
    xyz::~xyz() { }
    
    xyz testing;
    xyz testing2;
    
    void main()
    {
        xyz onstack;
        int i;
    
        i = testing2.c() + testing.a() + onstack.b();
    }

dgc

sacco@eileen.samsung.com (Joe Sacco) (05/28/89)

In article <1989May26.150134.24068@mntgfx.mentor.com>, dclemans@mntgfx.mentor.com (Dave Clemans @ APD x1292) observes :
 
    There is a problem in the placement of the destructor definition in his
    example. ......
    
    There was a similar problem with unions. Both of these problems seem to
    have vanished in 1.35.1-. I've installed the patches for 1.35.1- and
    have found that both versions of Dave's example now compile and run.


							JOE