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