C在预处理器#if中对sizeof()比较抛出编译错误

我有这个不能编译与Visual Studio的错误“致命错误C1017:无效的整数常量表达式”.我该怎么做?

template <class B>
A *Create()
{
  #if sizeof(B) > sizeof(A)
  #error sizeof(B) > sizeof(A)!
  #endif
  ...
}
最佳答案
预处理器不理解sizeof()(或数据类型,或标识符,模板或类定义,并且需要了解所有这些以实现sizeof).

你正在寻找的是静态断言(由编译器强制执行,它确实理解所有这些事情).我使用Boost.StaticAssert

template <class B>
A *Create()
{
  BOOST_STATIC_ASSERT(sizeof(B) <= sizeof(A));
  ...
}

转载注明原文:C在预处理器#if中对sizeof()比较抛出编译错误 - 代码日志