Dear all, I would like to post a fault report for the GNU C/C++ compiler 4.3.0.
Used invokation line for the GNU C++ compiler: gcc -c -x c++ -ansi -Wall -Werror -mcpu=603e -fverbose-asm -mbig -mmultiple -mstring -mstrict-align -meabi -msdata -fno-common -fno-exceptions -fno-rtti -O3 -fno-section-anchors -I<different include paths> -D<different #define's> X.CPP -oX.O // example program template <typename T_> T_* g (void* p) { return new(p) T_(); } void* operator new (unsigned int, void* p); int* h (void* p) { return g<int>(p); } GNU accepts the code frgment above which is illegal. It is illegal because . the name "new" in the body of function g() is a non-dependent name and non- dependent names are bound at the point they are used (14.6.3); . the new-expression in function g() is a placement-new-expression . only non-placement allocation functions are declared implicitly (3.7.3/2). BTW, the Comeau online compiler rejects the code above. Kind regards W. Roehrl -- Summary: placement new and name lookup in templates Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: wolfgang dot roehrl at gi-de dot com GCC build triplet: athlon-redhat-linux GCC host triplet: i686-pc-mingw32 GCC target triplet: powerpc-rtems4.9 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38542