BOOST_STATIC_ASSERT是一个简单但常用的宏,顾名思义起到编译期 断言的功效,可以通过它,在编译时对开发环境以及类型定义进行检查。 此类型检测对程序运行时无任何效率和空间上的影响。 例如在namespace中加入 namespace my_conditions { BOOST_STATIC_ASSERT(sizeof(int) * CHAR_BIT >= 32); BOOST_STATIC_ASSERT...
static_assert.cpp: In function 'void expects_ints_to_be_4bytes()': static_assert.cpp:11: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 也就是BOOST_STATIC_ASSERT的断言。把这行改成BOOST_STATIC_ASSERT(sizeof(int)==4);再编译,不会提示错...
template<int x> struct static_assert_test{}; 我们使用的是BOOST_STATIC_ASSERT(expr);这个宏看上去挺长挺吓人的,下面一层层的剥开它。 首先对表达式求值,并将结果转换为bool类型,这是由BOOST_STATIC_ASSERT_BOOL_CAST ( B )完成的。 然后,用求出的结果作为模板参数传给STATIC_ASSERTION_FAILURE类模板,使用si...
template<int x> struct static_assert_test{}; #define BOOST_STATIC_ASSERT(B) \ typedef static_assert_test<sizeof(STATIC_ASSERTION_FAILURE<B> > \ boost_static_assert_typedef_ ## __LINE__ 注意为了能够使用多个BOOST_STATIC_ASSERT,在类型命名时加入了 行号以区别。对namespace而言,因为同一namespace...
{BOOST_STATIC_ASSERT_MSG(boost::is_pod<T>::value,"This serialize2 function may be used only with pod types");BOOST_STATIC_ASSERT_MSG(BufSizeV>=sizeof(value),"Can not make value into buffer, make buffer bigger");std::memcpy(&buf[0],&value,sizeof(value));}intmain(intargc,char*...
BOOST_VERIFY宏是assert库提供的另一种工具,断言表达式一定会被求值,其余与BOOST_ASSERT行为相同。 assert与BOOST_ASSERT是运行时断言,但有时候运行时已经很晚了,程序已经发生了无可挽回的错误; static_assert库能够把断言诊断的时刻由运行时提前到编译期,增加程序的健壮性; ...
Boost 中的 BOOST_STATIC_ASSERT 先看定义在头文件中的语句: template<boolx>structSTATIC_ASSERTION_FAILURE;template<>structSTATIC_ASSERTION_FAILURE<true> {enum{ value = 1 }; };template<intx>structstatic_assert_test{};… 使用的是显示转换 // Note that the argument to the assert is explicitly ...
inlineTread_int(InIterator& start,booladvance=true,std::size_tbytesize=sizeof(T)){BOOST_STATIC_ASSERT(boost::is_float<T>::value||boost::is_integral<T>::value);returnread_value<T>(start,advance,bytesize); } 开发者ID:JingSao,项目名称:p2engine,代码行数:5,代码来源:io.hpp ...
BOOST_STATIC_ASSERT(boost::is_integral<T>::value); }; 有了这个断言,在实例化类only_compatible_with_integral_types时如果试图使用一个非整型的类型,就会导致一个编译期的失败。输出信息取决于编译器,但在多数编译器下输出信息会惊人地一致。 假设我们试图这样实例化: ...