2013-01-31 55 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功能)。

5

要強制編譯器錯誤(GCC,鏘風格):

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