c++ - BOOST_STATIC_ASSERT 的命名空间范围

标签 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 不会导致错误?

最佳答案

如果你这样做,就会出现问题

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/

相关文章:

c++ - 对于 double 或 float 的总和,EXPECT_EQ 出错

c++ - 通过菜单向下传递异常类型

c++ - 在 pthread_cond_wait 中取消线程是否会导致它重新获取相关的互斥锁?

c++ - Netbeans IDE 7.2.1 : How to add the c++ boost library

python - c++0x std::shared_ptr 与 boost::shared_ptr

C++:使用io.post和bind命令从boost线程在主线程中执行函数

C++ 对象生命周期和调用的析构函数

c++ - 如何将大于 std::numeric_limits<fundamental_type>::max() 的值传递给函数?

c++ - 如何返回 iterator_range

c++ - 用于组合类的 Boost Karma 生成器