Ключевое слово static_assert
Ключевое слово static_assert выполняет проверку
заданного условия во время компиляции программы.
Если условие истинно, компиляция продолжается как обычно.
Если условие ложно, компилятор выдаёт ошибку с указанным
сообщением и компиляция прекращается. Первым параметром
мы передаём проверяемое условие, которое должно быть
константным выражением, а во второй - строковый литерал
с сообщением об ошибке.
Синтаксис
static_assert(condition, message);
static_assert(condition);
Пример
Давайте проверим, что размер типа int равен
4 байтам. Если это так, программа скомпилируется
без ошибок:
#include <iostream>
using namespace std;
static_assert(sizeof(int) == 4, "int must be 4 bytes");
int main()
{
cout << "OK" << endl;
return 0;
}
Результат выполнения кода:
"OK"
Пример
Давайте намеренно зададим ложное условие и посмотрим, как компилятор отреагирует на это:
#include <iostream>
using namespace std;
static_assert(sizeof(int) == 8, "int must be 8 bytes");
int main()
{
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(1, 2) << endl;
return 0;
}
Результат выполнения кода:
3