【发布时间】:2017-08-15 21:08:36
【问题描述】:
我正在开发一个具有模板功能的项目:
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++ c++11 templates template-specialization