次のコードは、最小限の問題の例として記述されていますが、コンパイルに失敗します。
#include <boost/serialization/strong_typedef.hpp>
BOOST_STRONG_TYPEDEF( void * const *, my_const_iterator )
int main() {
return 0;
}
コンパイラは次のとおりです。
GNU g++
コンパイラ フラグは次のとおりです。
-Wall -Wextra -Werror -std=c++11 -pedantic
コンパイラ エラーは次のとおりです。
In file included from main.cpp:1:0:
main.cpp: In constructor 'my_const_iterator::my_const_iterator(const void* const*)':
../boost_1_53_0/boost/serialization/strong_typedef.hpp:36:38: error: invalid conversion from 'const void* const*' to 'void* const*' [-fpermissive]
explicit D(const T t_) : t(t_) {}; \
^
main.cpp:3:1: note: in expansion of macro 'BOOST_STRONG_TYPEDEF'
BOOST_STRONG_TYPEDEF( void * const *, my_const_iterator )
^
main.cpp: In member function 'my_const_iterator& my_const_iterator::operator=(const void* const*&)':
../boost_1_53_0/boost/serialization/strong_typedef.hpp:40:42: error: invalid conversion from 'const void* const*' to 'void* const*' [-fpermissive]
D & operator=(const T & rhs) { t = rhs; return *this;} \
^
main.cpp:3:1: note: in expansion of macro 'BOOST_STRONG_TYPEDEF'
BOOST_STRONG_TYPEDEF( void * const *, my_const_iterator )
^
main.cpp: In member function 'my_const_iterator::operator const void* const*&() const':
../boost_1_53_0/boost/serialization/strong_typedef.hpp:41:45: error: invalid initialization of reference of type 'const void* const*&' from expression of type 'void* const* const'
operator const T & () const {return t; } \
^
main.cpp:3:1: note: in expansion of macro 'BOOST_STRONG_TYPEDEF'
BOOST_STRONG_TYPEDEF( void * const *, my_const_iterator )
^
そのため、コンパイラは問題が に変換void * const * const
されていると言っているようですvoid * const *
が、このコードは正常にコンパイルされます (b が使用されていないという警告を無視します)。
int main() {
void * const * const a( nullptr );
void * const * b( a );
return 0;
}
何かばかげたことを見逃しているに違いないと思います。BOOST_STRONG_TYPEDEF がコンパイルされないのはなぜですか?