我正在浏览有关 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 不会导致错误?
最佳答案
如果你这样做,就会出现问题
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);
}
因为当在命名空间范围内使用 BOOST_STATIC_ASSERT
时,实现使用 stub 名称与 __LINE__
组合来定义 typedef。当在同一命名空间的同一行使用时,将出现重复的 typedef,这可能会导致编译错误。
关于c++ - BOOST_STATIC_ASSERT 的命名空间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669271/