2013-01-31 17 views
14

カスタムエラーメッセージでC++コードにコンパイル時のエラーを作成したいと思います。私はいくつかの理由でこれをやりたいのです。まだ実装されていない新機能に取り組んでいるうちにコンパイルが失敗するように強制するには、いくつか理由があります:C++でコンパイルエラーをどのように強制できますか?

  • (コンパイル時間!TODOリマインダ)
  • サポートされていないテンプレートの特殊化を実装しようとすると、より読みやすいエラーが作成されます。

私は確かにこれを行うにはトリックがありますが、私は方法を説明するリソースを見つけることができません。私は、フォームのCOMPILE_FAIL( "エラーメッセージ")の#defineにコードをラップします。

おかげ D

+2

必要なものは 'static_assert'です。 http://stackoverflow.com/questions/6765770/compile-time-assertion – legends2k

+0

#errorを試しましたか? – thang

+0

static_assertは完全にmsvc10でジョブを実行します。:-) –

答えて

32

使用#error

#error "YOUR MESSAGE" 

これは、プリプロセッサからのエラーを生成します。後で(たとえばテンプレート処理中に)エラーを検出する場合は、static_assert(C++ 11の機能)を使用します。コンパイラエラー(GCC、クランスタイル)強制的に

5

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

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 
} 
関連する問題