2013-01-31 11 views
14

Vorrei creare un errore in fase di compilazione nel mio codice C++ con un messaggio di errore personalizzato. Voglio farlo per un paio di motivi:Come posso forzare un errore di compilazione in C++?

  • per forzare la compilazione in errore mentre sto lavorando su nuove funzionalità che non sono ancora state implementate. (tempo di compilazione! TODO promemoria)
  • per creare un errore più leggibile quando si tenta di implementare una specializzazione modello non supportata.

Sono sicuro che c'è un trucco per farlo ma non trovo una risorsa che spieghi il metodo. Vorrei avvolgere il codice in un #define del modulo COMPILE_FAIL ("messaggio di errore");

Grazie D

+2

Quello che vi serve è 'static_assert'. http://stackoverflow.com/questions/6765770/compile-time-assertion – legends2k

+0

hai provato #error? – thang

+0

static_assert fa totalmente il lavoro su msvc10 ... :-) –

risposta

32

Uso #error:

#error "YOUR MESSAGE" 

Questo produce un errore dal preprocessore. Se si desidera rilevare un errore in una fase successiva (ad esempio durante l'elaborazione del modello), utilizzare static_assert (una funzione C++ 11).

5

per forzare un errore del compilatore (GCC, stile Clang):

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

sguardo nel static_assert.

Esempio:

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