From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20342 invoked by alias); 16 Dec 2008 12:10:15 -0000 Received: (qmail 19239 invoked by uid 48); 16 Dec 2008 12:08:55 -0000 Date: Tue, 16 Dec 2008 12:10:00 -0000 Subject: [Bug c++/38542] New: placement new and name lookup in templates X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "wolfgang dot roehrl at gi-de dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-12/txt/msg01601.txt.bz2 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 -D X.CPP -oX.O // example program template T_* g (void* p) { return new(p) T_(); } void* operator new (unsigned int, void* p); int* h (void* p) { return g(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