Sourc code for t.cpp:
------------------------------------------------
struct D1
        {
        void operator delete(void *p) throw (){}
        };

struct D2
        {
        void operator delete(void *p) throw (){}
        };

class MD : public D1, public D2
        {
        };

int mymain()
        {
        MD *p = new MD; /* error - ambiguous operator delete */
        return 0;
        }

------------------------------------------------



Expected Behaviour:
------------------------------------------------
t.cpp: In function `int mymain()':
t.cpp:18: request for member `operator delete' is ambiguous
t.cpp:8: candidates are: static void D2::operator delete(void*)
t.cpp:3: static void D1::operator delete(void*)
------------------------------------------------



Actual Behaviour:
------------------------------------------------
None.
------------------------------------------------



t.ii generated with -save-temps option
------------------------------------------------
# 1 "t.cpp"
# 1 "t.cpp"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "t.cpp"
struct D1
        {
        void operator delete(void *p) throw (){}
        };

struct D2
        {
        void operator delete(void *p) throw (){}
        };

class MD : public D1, public D2
        {
        };

int mymain()
        {
        MD *p = new MD;
        return 0;
        }

------------------------------------------------




Release:
------------------------------------------------
GCC Version: 3.2.0
------------------------------------------------




Environment:
System Type:
------------------------------------------------
Reading specs from 
/usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/specs
Configured with: /scratch/gcc-3.2/configure --prefix=/usr/local/gcc.3.2.0
--enable-threads=aix --disable-nls
Thread model: aix
gcc version 3.2
 /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/cpp0 -lang-c++
-D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -iprefix
/usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/ -D__GNUC__=3
-D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D_IBMR2
-D_POWER -D_LONG_LONG -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -Asystem=unix
-Asystem=aix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_XOPEN_SOURCE=500
-D_XOPEN_SOURCE_EXTENDED=1 -D_LARGE_FILE_API -D_ALL_SOURCE
-D__WCHAR_TYPE__=short unsigned int -D_ARCH_COM
/home/msadoghi/scenario/common/t.cpp -std=iso9899:199409 t.ii
GNU CPP version 3.2 (cpplib)
ignoring nonexistent directory
"/usr/local/lib/gcc-lib/../../powerpc-ibm-aix5.1.0.0/include"
ignoring nonexistent directory 
"/usr/local/gcc.3.2.0/powerpc-ibm-aix5.1.0.0/include"
ignoring duplicate directory
"/usr/local/gcc.3.2.0/lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/include
 /usr/local/include
 /usr/local/gcc.3.2.0/include
 /usr/include
End of search list.
 /usr/local/bin/../lib/gcc-lib/powerpc-ibm-aix5.1.0.0/3.2/cc1plus -fpreprocessed
t.ii -quiet -dumpbase t.cpp -std=iso9899:199409 -version -o t.s
GNU CPP version 3.2 (cpplib)
GNU C++ version 3.2 (powerpc-ibm-aix5.1.0.0)
        compiled by GNU C version 3.2.
 as -u -mcom -o t.o t.s
------------------------------------------------




How-To-Repeat:
------------------------------------------------
g++ -v -save-temps -c -std=iso9899:199409 t.cpp
------------------------------------------------


Note:
------------------------------------------------
This is a diagnostic test case. Compilation failure is expected. However the
compilation
is successful and no error or warning messages are produced. According to C++
ANSI Standard
the test cases should produces an error. Therefore, in the strict mode compiler
should
produce a server error and in the extended mode it should at least produces a
warning. 

C++ ANSI Standard:
"new-expression that creates object of class type or array thereof must check
ambiguity for 
 allocation function, deallocation function, and constructor this checks access 
 for operator delete"

AIX, MACOS and LINUX all have a similar behaviors.
------------------------------------------------

-- 
           Summary: request for member `operator delete' is ambiguous
           Product: gcc
           Version: 3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: msadoghi at ca dot ibm dot com
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20041

Reply via email to