Подтвердить что ты не робот

Как я могу заставить компилировать ошибку в С++?

Я хотел бы создать ошибку компиляции в моем коде на С++ с помощью специального сообщения об ошибке. Я хочу сделать это по двум причинам:

  • чтобы заставить компиляцию сбой, пока я работаю над новыми функциями, которые еще не реализованы. (время компиляции! напоминание TODO)
  • чтобы создать более читаемую ошибку при попытке реализовать неподдерживаемую специализацию шаблонов.

Я уверен, что есть трюк, но я не могу найти ресурс, объясняющий метод. Я бы обернул код в #define формы COMPILE_FAIL ( "сообщение об ошибке" );

Спасибо D

4b9b3361

Ответ 1

Используйте #error:

#error "YOUR MESSAGE"

Это приводит к ошибке из препроцессора. Если вы хотите обнаружить ошибку на более позднем этапе (например, во время обработки шаблона), используйте static_assert (функция С++ 11).

Ответ 2

Посмотрите static_assert.

Пример:

#include <iostream>
#include <type_traits>

template<typename T>
class matrix {
    static_assert(std::is_integral<T>::value, "Can only be integral type");
};

int main() {
    matrix<int*> v; //error: static assertion failed: Can only be integral type
}

Ответ 3

Чтобы заставить ошибку компилятора (GCC, стиль Clang):

#error "You ain't finished this yet!"