在我們的單元測試,我們下面幾行:你能檢測到不可編譯的代碼嗎?
// Should not compile - manually checked
// auto val = ::Utils::LexicalCast<const char*>(5);
事實上,如果我取消這個代碼是內LexicalCast未能在static_assert:
static_assert(!std::is_pointer<ToType>::value, "Cannot return pointers from a LexicalCast");
,因爲在這種情況下,將不清楚誰擁有記憶。
所以我的問題是,使用任何先進的C++功能(我主要是想SFINAE的,但我不是在它深諳)是可以檢查,如果事情不會編譯由於功能的static_assert 稱爲 ?我不介意在運行時或編譯時檢測,不介意宏等,因爲這些都是測試。
編輯:例如我想是這樣
ASSERT_DOESNT_COMPILE(::Utils::LexicalCast<const char*>(5));
簡單情況:提供了定義條件啓用代碼的不同部分。然後有一個'測試驅動程序',它運行帶有不同定義的編譯器,並檢查編譯器在應該時是否失敗。你可能也想看看boost,我認爲它們在庫中有類似的測試(編譯/不編譯) –
從單元測試運行編譯器(exe或lib),並檢查結果? – Jarod42
你能檢測到不可編譯的代碼嗎?是>嘗試編譯它,如果失敗,它是不可編譯的。 – Davidbrcz