无法推断模板参数' N'

时间:2017-01-11 09:49:28

标签: c++ templates c++14 stdarray template-deduction

我试图将其降低到最低限度:

#include <array>

template <std::size_t N>
void f(int, std::array<int, N> const & =
       std::array<int, 0>()) {
}


int main() {
    f(10);
}

array_test.cpp:4:6:注意:模板参数扣除/替换失败: array_test.cpp:10:9:注意:不能推导模板参数'N'      F(10);

为什么这会失败?我不明白:它应该可以从默认参数中推断出来。我需要一个解决方法。

1 个答案:

答案 0 :(得分:7)

您需要为N提供默认值,而不是数组:

template <std::size_t N = 0>
void f(int, std::array<int, N> const & =
       std::array<int, N>()) {

}

至于无法从默认值中推断出N的原因,请参阅Why can't the compiler deduce the template type from default arguments?