我正在它有一个模板功能使项目失败编译:使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。这是一个函数模板,而不是一个类模板。您可以删除函数模板特化,而不仅仅是构造函数和析构函数。 –