类模板的编译错误(专业除外)

时间:2018-07-24 17:32:39

标签: c++ templates

我想禁止所有类型的类模板,除了类型类专用于使用静态断言。请检查以下代码:

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;
}

我的问题是为什么第二个版本可以,第二个版本为什么不可以?

1 个答案:

答案 0 :(得分:0)

非常容易:

template <typename Type>
class foo; // just don't provide an implementation...

template <>
class foo<int> { };