引发编译时错误

时间:2018-06-07 16:19:06

标签: c++ c++11

当尝试某个功能模板的特殊化时,有没有办法引发编译时错误?

template<typename T> T Factorial(T n) { ... }

short n;
cout << Factorial(n); // Error, short is too small

有没有办法对模板类的特定方法实现相同的效果?

template<typename T> class Arithmetic
{
  T n;
  T GCD(T m) { ... }
  T Factorial() { ... }
};

Arithmetic<short> A;
short m;

cout << A.GCD(m); // Ok
cout << A.Factorial(); // Error, short is too small

1 个答案:

答案 0 :(得分:3)

This可以解决问题:

template<typename T>
class Foo {
public:
  Foo() {
    static_assert(sizeof(T) > sizeof(short));
  }
};

int main() {
  Foo<short> foo;
  return 0;
}

(请注意static_assert没有诊断消息需要C ++ 17)