使用static_assert检查传递给宏的类型

Mat*_*ner 25 c c++ g++ static-assert visual-studio-2010

我很遗憾地从我的库的原始版本中遗留了几个宏,这些宏使用了一些非常疯狂的C.特别是,我有一系列宏,希望将某些类型传递给它们.有可能做一些事情:

static_assert(decltype(retval) == bool);
Run Code Online (Sandbox Code Playgroud)

如何?有没有聪明的选择?

是的我知道宏很糟糕.我知道C++不是C等.

Update0

这是一些相关的代码源文件.欢迎提出建议.原来的问题仍然是一样的.

Mat*_*ner 53

我发现这是最干净的,使用@ UncleBens建议:

#include <type_traits>

static_assert(std::is_same<decltype(retval), bool>::value, "retval must be bool");
Run Code Online (Sandbox Code Playgroud)

  • @balki:刚刚升级到C++ 11.C++已经够糟糕了,不要让自己变得更糟:) (7认同)
  • 使用`std :: is_same`时,请务必使用`#include <type_traits>`. (7认同)
  • 什么是c ++ 03等价物? (2认同)