2013-01-31 11 views
14

Chciałbym utworzyć błąd kompilacji w moim kodu C++ z niestandardowy komunikat o błędzie. Chcę to zrobić z kilku powodów:Jak wymusić błąd kompilacji w C++?

  • zmusić kompilację do awarii podczas pracy nad nowymi funkcjami, które nie zostały jeszcze zaimplementowane. (czas kompilacji! Przypomnienie TODO)
  • w celu uzyskania bardziej czytelnego błędu podczas próby wdrożenia nieobsługiwanej specjalizacji szablonu.

Jestem pewien, że istnieje pewna sztuczka, ale nie mogę znaleźć zasobu wyjaśniającego tę metodę. Chciałbym zawinąć kod w # define formularza COMPILE_FAIL ("komunikat o błędzie");

Dzięki D

+2

Co trzeba to 'static_assert'. http://stackoverflow.com/questions/6765770/compile-time-assertion – legends2k

+0

czy próbowałeś #error? – thang

+0

static_assert całkowicie wykonuje pracę na msvc10 ... :-) –

Odpowiedz

32

Zastosowanie #error:

#error "YOUR MESSAGE" 

To daje błąd z preprocesora. Jeśli chcesz wykryć błąd na późniejszym etapie (np. Podczas przetwarzania szablonu), użyj static_assert (funkcja C++ 11).

5

Aby wymusić błąd kompilatora (gcc, styl Clang):

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

zajrzeć do static_assert.

Przykład:

#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 
}