我试图将其降低到最低限度:
#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);
为什么这会失败?我不明白:它应该可以从默认参数中推断出来。我需要一个解决方法。
答案 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?。