http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55058
Bug #: 55058 Summary: [4.7/4.8 Regression] Unexpected invalid type conversion error Classification: Unclassified Product: gcc Version: 4.7.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: sebastian.hu...@embedded-brains.de Created attachment 28518 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28518 Sample code The attached test file produces with "g++ -c test.cc" of GCC version 4.7 (e.g. the one shipped with OpenSuse 12.2) and 4.8 the following output: test.cc: In constructor 'C_DrvDataBuffer::C_DrvDataBuffer(ushort, ushort)': test.cc:20748:34: error: invalid conversion from 'const T_SND_NODE C_DrvSndDataBlock::* {aka const list_node<C_DrvSndDataBlock, with_lock, oper_safe> C_DrvSndDataBlock::*}' to 'list_node<C_DrvSndDataBlock, with_lock, oper_safe> C_DrvSndDataBlock::*' [-fpermissive] test.cc:16667:1: error: initializing argument 1 of 'list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::list_base(const T_C_NODE_ T_::*, const char*, bool) [with T_ = C_DrvSndDataBlock; lock_ = with_lock; test_ = oper_safe; bool amp_ = false; list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::T_C_NODE_ = list_node<C_DrvSndDataBlock, with_lock, oper_safe>]' [-fpermissive] test.cc:20748:34: error: invalid conversion from 'const T_SND_NODE C_DrvSndDataBlock::* {aka const list_node<C_DrvSndDataBlock, with_lock, oper_safe> C_DrvSndDataBlock::*}' to 'list_node<C_DrvSndDataBlock, with_lock, oper_safe> C_DrvSndDataBlock::*' [-fpermissive] test.cc:16667:1: error: initializing argument 1 of 'list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::list_base(const T_C_NODE_ T_::*, const char*, bool) [with T_ = C_DrvSndDataBlock; lock_ = with_lock; test_ = oper_safe; bool amp_ = false; list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::T_C_NODE_ = list_node<C_DrvSndDataBlock, with_lock, oper_safe>]' [-fpermissive] test.cc:20748:34: error: invalid conversion from 'const T_RCV_NODE C_DrvRcvDataBlock::* {aka const list_node<C_DrvRcvDataBlock, with_lock, oper_safe> C_DrvRcvDataBlock::*}' to 'list_node<C_DrvRcvDataBlock, with_lock, oper_safe> C_DrvRcvDataBlock::*' [-fpermissive] test.cc:16667:1: error: initializing argument 1 of 'list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::list_base(const T_C_NODE_ T_::*, const char*, bool) [with T_ = C_DrvRcvDataBlock; lock_ = with_lock; test_ = oper_safe; bool amp_ = false; list_base< <template-parameter-1-1>, <template-parameter-1-2>, test_, amp_>::T_C_NODE_ = list_node<C_DrvRcvDataBlock, with_lock, oper_safe>]' [-fpermissive] The test code can be compiled with the Comeau-Online-Compiler: http://www.comeaucomputing.com/tryitout The GCC 4.6 works also.