Задание № 1018

Студент

Карповский Андрей

Задача

Static assert

Состояние

Завершено

Баллов

1

Дедлайн
19 сентября 2017
Назначено

05.09.2017, 08:58

Завершено

12.09.2017, 05:28

Задача

С помощью метапрограммирования и шаблонов C++ самостоятельно реализовать функцию STATIC_ASSERT производящую проверку условия на этапе компиляции.

Описание

Классическая функция assert производит проверку условия во время выполнения программы, и, если условие не верное, прерывает выполнение программы и выводит диагностическое сообщение.

В отличии от неё функция STATIC_ASSERT производит проверку условия ещё на этапе компиляции, и, если условие не выполняется, прерывает процесс компиляции с ошибкой.

Пример

STATIC_ASSERT(sizeof(int) == 4); // должно компилироваться всегда
struct Test
{
    char a;   // sizeof(a) = 1
    double b; // sizeof(b) = 8
}

STATIC_ASSERT(sizeof(Test) == (sizeof(a) + sizeof(b))); // вряд ли скомпилируется

Примечания

Без нормального вывода текста ошибки.

Действия