无法推断模板参数 'N'

Cannot deduce template parameter 'N'

我试图将其减少到最低限度:

#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: 注意:模板参数 deduction/substitution 失败: array_test.cpp:10:9: 注意:无法推断模板参数“N” f(10);

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

您需要给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?