Ключевое слово static_assert
Ключевое слово static_assert выполняет проверку условия
во время компиляции. Если условие истинно, компиляция
продолжается как обычно. Если условие ложно, компилятор
выдаёт ошибку с указанным сообщением. В первом параметре
мы передаём проверяемое условие, а во второй - строковый
литерал с сообщением об ошибке. Начиная с C++17 второй
параметр можно опустить.
Синтаксис
static_assert(condition, "message");
static_assert(condition);
Пример
Давайте проверим, что размер типа int равен 4 байтам:
#include <iostream>
using namespace std;
int main()
{
static_assert(sizeof(int) == 4, "int must be 4 bytes");
cout << "OK" << endl;
return 0;
}
Результат выполнения кода:
"OK"
Пример
Давайте попробуем заведомо ложное условие и увидим ошибку компиляции:
#include <iostream>
using namespace std;
int main()
{
static_assert(sizeof(int) == 8, "int must be 8 bytes");
cout << "OK" << endl;
return 0;
}
Результат выполнения кода (ошибка компиляции):
error: static assertion failed: int must be 8 bytes
Пример
Давайте используем static_assert внутри шаблонной
функции для проверки типа:
#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
T add(T a, T b)
{
static_assert(is_integral<T>::value, "T must be integral");
return a + b;
}
int main()
{
cout << add(2, 3) << endl;
return 0;
}
Результат выполнения кода:
5