egcs-1.0.3a prefering template copy-ctor of class template in fn return
Gregory Bond
gnb@itga.com.au
Tue Jul 7 21:18:00 GMT 1998
The following example shows that egcs1.0.3a (config with --with-gnu-ld on a
Sun E450/Solaris 2.6 box) is prefering the template copy-ctor to the explicit
copy-ctor for function returns.
This is not a problem (afaict) for passing function args or standard
copy-initializations, only function returns.
Egcs chooses the template copy-ctor whether the explicit copy-ctor is defined
or not. (Footnote 4 to 12.8 .2 in Dec96 CD2 imply the template copy-ctor
should never be called irrespective of whether there is an explicit copy-ctor).
-------------------
#include <assert.h>
template <class T>
class F
{
public:
F() { }
F(const F&) { }
template <class T2> F(F<T2>)
{
assert(0 && "Templated copyctor called");
}
};
template <class T>
F<T>
foo()
{
return F<T>();
}
int
main()
{
foo<int>();
}
/*
Reading specs from /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/specs
gcc version egcs-2.90.29 980515 (egcs-1.0.3 release)
/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) tt5.C /var/tmp/cc67Pa9_.ii
GNU CPP version egcs-2.90.29 980515 (egcs-1.0.3 release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/egcs/include/g++
/usr/local/include
/usr/local/egcs/sparc-sun-solaris2.6/include
/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/include
/usr/include
End of search list.
/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/cc1plus /var/tmp/cc67Pa9_.ii -quiet -dumpbase tt5.cc -version -o /var/tmp/cc67Pa9_.s
GNU C++ version egcs-2.90.29 980515 (egcs-1.0.3 release) (sparc-sun-solaris2.6) compiled by GNU C version egcs-2.90.29 980515 (egcs-1.0.3 release).
/usr/ccs/bin/as -V -Qy -s -o /var/tmp/cc67Pa9_1.o /var/tmp/cc67Pa9_.s
/usr/ccs/bin/as: WorkShop Compilers 4.X dev 18 Sep 1996
/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/ld -V -Y P,/usr/ccs/lib:/usr/lib -Qy /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/crt1.o /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/crti.o /usr/ccs/lib/values-Xa.o /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/crtbegin.o -L/usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29 -L/usr/local/egcs/sparc-sun-solaris2.6/lib -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/egcs/lib /var/tmp/cc67Pa9_1.o -lstdc++ -lm -lgcc -lc -lgcc /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/crtend.o /usr/local/egcs/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.90.29/crtn.o
ld: Software Generation Utilities - Solaris/ELF (3.0)
lightning$ ./a.out
tt5.C:12: failed assertion `0 && "Templated copyctor called"'
Abort (core dumped)
*/
More information about the Gcc-bugs
mailing list