This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/21853] New: constness of pointer to data member ignored
- From: "david dot m dot krauss at intel dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Jun 2005 00:05:20 -0000
- Subject: [Bug c++/21853] New: constness of pointer to data member ignored
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
When casting a pointer to const to a pointer to const pointer to data member
type, the constness of the ptdm is ignored. This breaks ptdm members of
boost::variant union types. Example code:
struct blah {
int a;
};
int main( int argc, char ** argv ) {
int blah::* ptdma = &blah::a;
const void *ptdmv = static_cast< void * >( &ptdma );
int blah::* const ptdmb = * static_cast< int blah::* const * >( ptdmv );
return 0;
}
This code compiles fine on the Comeau web test-drive. GCC 3.1, 3.4.3, and 4.0.0
all choke on the second static_cast. (I'm only filing for 4.0.0.)
More stats:
% /usr/intel/pkgs/gcc/4.0.0/bin/g++ -v -save-temps test2.cpp
Reading specs from
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/specs
Target: i686-pc-linux-gnu
Configured with: ../gcc-4.0.0/configure --prefix=/usr/intel/pkgs/gcc/4.0.0
--with-as=/usr/intel/pkgs/gcc/4.0.0/bin/gas
--with-ld=/usr/intel/pkgs/gcc/4.0.0/bin/gld --disable-libgcj
--enable-languages=c,c++,objc
Thread model: posix
gcc version 4.0.0
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../libexec/gcc/i686-pc-linux-gnu/4.0.0/cc1plus
-E -quiet -v -iprefix
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/
-D_GNU_SOURCE test2.cpp -mtune=pentiumpro -fpch-preprocess -o test2.ii
ignoring nonexistent directory
"/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../i686-pc-linux-gnu/include"
ignoring duplicate directory
"/usr/intel/pkgs/gcc/4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0"
ignoring duplicate directory
"/usr/intel/pkgs/gcc/4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/i686-pc-linux-gnu"
ignoring duplicate directory
"/usr/intel/pkgs/gcc/4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/backward"
ignoring duplicate directory
"/usr/intel/pkgs/gcc/4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/include"
ignoring nonexistent directory
"/usr/intel/pkgs/gcc/4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/i686-pc-linux-gnu
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/backward
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../lib/gcc/i686-pc-linux-gnu/4.0.0/include
/usr/local/include
/usr/intel/pkgs/gcc/4.0.0/include
/usr/include
End of search list.
/nfs/site/itools/i386_linux24/pkgs/gcc/4.0.0/bin/../libexec/gcc/i686-pc-linux-gnu/4.0.0/cc1plus
-fpreprocessed test2.ii -quiet -dumpbase test2.cpp -mtune=pentiumpro -auxbase
test2 -version -o test2.s
GNU C++ version 4.0.0 (i686-pc-linux-gnu)
compiled by GNU C version 3.4.2.
GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128505
test2.cpp: In function 'int main(int, char**)':
test2.cpp:10: error: static_cast from type 'const void*' to type 'const int
blah::* const* const' casts away constness
--
Summary: constness of pointer to data member ignored
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: david dot m dot krauss at intel dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21853