我想禁止所有类型的类模板,除了类型类专用于使用静态断言。请检查以下代码:
template <typename Type>
class foo {
static_assert(false, "Wrong Type");
};
template <>
class foo<int> {
};
int main()
{
foo<int> fi; // should compile
foo<double> fd; // should not compile
return 0;
}
但是它不起作用。经过一番研究,我发现了一个问题,回答了我的问题:Enforce template type through static_assert
我已经根据问题更新了代码:
template <typename Type>
class foo {
static_assert(sizeof(Type) == -1, "Wrong Type!");
};
template <>
class foo<int> {
};
int main()
{
foo<int> fi; // should compile
foo<double> fd; // should not compile
return 0;
}
我的问题是为什么第二个版本可以,第二个版本为什么不可以?
答案 0 :(得分:0)
非常容易:
template <typename Type>
class foo; // just don't provide an implementation...
template <>
class foo<int> { };