Возникновение ошибок во время компиляции - PullRequest
0 голосов
/ 07 июня 2018

Есть ли способ вызвать ошибку времени компиляции при попытке определенной специализации шаблона функции?

Сказать

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 голосов
/ 07 июня 2018

Это может помочь:

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

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

(учтите, что static_assert без диагностического сообщения требует C ++ 17)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...