在static_assert错误中包含类型或函数名称

时间:2015-10-15 14:23:55

标签: c++ c++11

在许多情况下,模板函数和类型需要静态断言来限制可接受的特化类型或其他条件。然后需要有意义的编译器错误消息。如果您不想为每种情况逐个编写字符串文字,可以为错误消息或完整断言创建一些宏,但是 如何隐式地将类型/函数的名称包含在错误消息中?

在下面的示例中, FUNCNAME 是一个虚构的关键字,可以让魔术发生:

#include <type_traits>

#define ASSERT_INTEGRAL(T) static_assert(std::is_integral<T>::value, \
FUNCNAME ## " would be happy with specializations for integral types");

template <typename T>
class A
{
  public:

    A()
    {
        ASSERT_INTEGRAL(T)
    }
};

对于模板类型,如果在构造函数中执行静态断言,那么函数的名称就足够了。对于这种情况,有C99标准宏__func__,但事实证明static_assert并不接受它作为字符串文字。

那么解决方案是什么?

0 个答案:

没有答案