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 struct X { X (void*); }; int i; volatile X ax1(&i); volatile X ax2 = &i; // <--- line 9 const volatile X bx1(&i); const volatile X bx2 = &i; // <--- line 12 GNU rejects the code fragment with the following error messages: X.CPP:9: error: no matching function for call to 'X::X(volatile X)' X.CPP:3: note: candidates are: X::X(void*) X.CPP:2: note: X::X(const X&) X.CPP:12: error: no matching function for call to 'X::X(const volatile X)' X.CPP:3: note: candidates are: X::X(void*) X.CPP:2: note: X::X(const X&) The initializations in lines 9 and 12 are copy-initializations with a call to the converting constructor "X::X (void*)". The result of this call is a temporary of type "X" (and not of type "[const] volatile X"), which can be copied with the implicitly-generated copy constructor "X::X (const X&)". BTW, the Comeau online compiler accepts the code above. Kind regards W. Roehrl -- Summary: copy initialization of volatile objects 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=41518