我在BOOST_STATIC_ASSERT上浏览了这个文档,但是我无法理解头文件中命名空间作用域中使用的这个宏的观点。
http://www.boost.org/doc/libs/1_55_0/doc/html/boost_staticassert.html
namespace my_conditions {
BOOST_STATIC_ASSERT(std::numeric_limits<int>::digits >= 32);
BOOST_STATIC_ASSERT(WCHAR_MIN >= 0);
} // namespace my_conditions
该文档说由于头文件可以多次包含,因此宏可以有多个声明,而某些编译器可能会导致错误。
命名空间my_conditions的多个包含不会导致错误?
答案 0 :(得分:3)
如果你做这样的事情会出现问题
<强>那么header1.h 强>
namespace my_conditions {
BOOST_STATIC_ASSERT(std::numeric_limits<int>::digits >= 32);
}
<强> Header2.h 强>
namespace my_conditions {
BOOST_STATIC_ASSERT(WCHAR_MIN >= 0);
}
因为在命名空间范围内使用__LINE__
时,实现使用存根名称与BOOST_STATIC_ASSERT
结合来定义typedef。当在同一名称空间中的同一行使用时,将出现重复的typedef,这可能导致编译错误。