3.4.6 と比較して 4.2 でコンパイルするようにプロジェクトを移植しています。
gcc 4.2 で次のコードをコンパイルしているときにエラーが発生しますが、gcc3.4.6 では問題なく動作します。
BOOST_MPL_ASSERT を使用してみましたが、成功しませんでした。
template< uint64_t N , class T >
struct count
{
BOOST_STATIC_ASSERT( _to_bool_< typename _is_integer_<T>::value >::VALUE == true );
//BOOST_MPL_ASSERT( ( bool_< _to_bool_< typename _is_integer_<T>::value >::VALUE == true > ) );
static
uint64_t compute( T const & p_arg ) {
enum { VALUE = ( N >> 1 ),
MASK = ( ( ( 1UL << VALUE ) - 1 ) ) } ;
return count < VALUE, T >::compute( MASK & ( p_arg >> VALUE ) )
+ count < VALUE, T >::compute( p_arg & MASK );
}
};
エラーの原因となっているコード行
if( count< static_cast< uint64_t >( 64 ), uint64_t >::compute( p_max_block_size ) > 1 ) {
set_fail_bit();
return 0;
}