1

次のコードは、最小限の問題の例として記述されていますが、コンパイルに失敗します。

#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 がコンパイルされないのはなぜですか?

4

0 に答える 0