使用模板<>在争论中

时间:2016-11-28 13:00:28

标签: c++ templates

我习惯了完全专业模板的模板语法:

template<typename T>
struct S {};

template<>
struct S<int> {}; // Fully specialized

但我不知道我可以用它作为一个论点:

void fn(std::function<> lambda){
}

int main() {
  fn([](){ std::cout << "Hello"; });
}

上述意思是“给我一个完全专业化的std :: function作为参数”吗? 为什么没有template <> std::function语法?

1 个答案:

答案 0 :(得分:1)

看来(参见this documentation of std::function)C ++标准没有提供std::function<signature>的完全专用版本,即signature=void()之类的默认版本。因此,如果您的代码已编译,则使用的C ++标准库不完全符合标准。您应该提交错误报告。