我正在它有一個模板功能使項目失敗編譯:使C++模板函數的具體實例
template <class T>
T foo<T>(T val) { return someFunc(val); }
template <>
bool foo<bool>(bool val) { return otherFunc(val); };
現在,我有一個類Bar
,我不想接受爲輸入。事實上,我想讓它產生一個容易發現的編譯錯誤。問題是,如果我這樣做:
template <>
Bar foo<Bar>(Bar val) { static_assert(false,"uh oh..."); }
它在每次編譯時失敗。我發現https://stackoverflow.com/a/3926854/7673414,它說我需要引用模板類型,否則靜態斷言總是會發生。問題是我在這裏沒有模板類型。如果我這樣做:
template< typename T >
struct always_false {
enum { value = false };
};
template <>
Bar foo<Bar>(Bar val) { static_assert(always_false<Bar>::value,"uh oh..."); }
那麼它也總是編譯失敗。有沒有辦法確保類型爲Bar
的模板實例化總是會導致編譯錯誤?
這很好,但我會刪除d-tor,而不必刪除所有各種c-tor。 –
@YehezkelB。這是一個函數模板,而不是一個類模板。您可以刪除函數模板特化,而不僅僅是構造函數和析構函數。 –