BOOST_STATIC_ASSERT的命名空间范围

时间:2013-12-18 21:56:19

标签: c++ boost

我在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的多个包含不会导致错误?

1 个答案:

答案 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,这可能导致编译错误。