leo@atcmp.nl (Leo Willems) (07/06/90)
The next program calls a default constructor at an unexpected place,
I think it is a bug.
=================
struct A{
A(){ puts("I am default constructor A()"); }
};
struct B{
B() { puts("I am default constructor B()"); }
B(B&){ puts("I am copy constructor B(B&)"); }
};
struct C{
C(){ puts("I am default constructor C()");}
A a;
B b;
};
main()
{
puts(" first a 'default' constructor:");
C defc;
puts("\n now a copy constructor: ");
C copc(defc);
}
======outputs: (after compilation with Glsp. 2.0 for sparc station):
first a 'default' constructor:
I am default constructor A()
I am default constructor B()
I am default constructor C()
now a copy constructor:
I am default constructor A() <===== offending constructor call
I am copy constructor B(B&)
===============================
This is the first reason why I think this is a bug:
The A() constructor is used on the A part of variable copc,( not on
some temporary) so the A part of copc is first initialised using
A::A(), THEN overwitten using the default memberwise initialisation.
(In practice, this will not often lead to an error)
This is the second reason why I think this is a bug:
When in class C the declarations of the members A and B are switched
the `error' is gone, the output becomes:
================
first a 'default' constructor:
I am default constructor B()
I am default constructor A()
I am default constructor C()
now a copy constructor:
I am copy constructor B(B&)
===============
Is this fixed in 2.1? (If it's a bug......)
Thanks
Leo
Leo Willems Internet: leo@atcmp.nl
AT Computing UUCP: mcsun!hp4nl!kunivv1!atcmpe!leo
P. O. Box 1428
6501 BK Nijmegen Phone: +31-80-566880
The Netherlands Fax: +31-80-555887