のコンパイルに失敗++:今メイク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
のテンプレートのインスタンス化で、常にコンパイルエラーが発生することを確実にする方法はありますか?
それはいいですが、私は様々なc - torsをすべて削除する代わりに、d - torを削除したいと思います。 –
@ YehezkelB。これはクラステンプレートではなく、関数テンプレートです。コンストラクタやデストラクタだけでなく、関数テンプレートの特殊化を削除できます。 –