Невозможно вывести параметр шаблона "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: примечание: ошибка вывода/подстановки аргумента шаблона: array_test.cpp:10:9: примечание: не удалось вывести параметр шаблона ‘N’ f(10);

Почему это не удается? Я не понимаю: это должно быть выведено из аргумента по умолчанию. Мне нужно обходное решение.


person Germán Diago    schedule 11.01.2017    source источник
comment
Обходным путем было бы значение N по умолчанию, как в template<std::size_t N = 0>   -  person DeiDei    schedule 11.01.2017


Ответы (1)


Вам нужно указать значение по умолчанию для N, а не для массива:

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

}

О том, почему N нельзя вывести из значения по умолчанию, см. Почему компилятор не может вывести тип шаблона из аргументов по умолчанию?.

person Holt    schedule 11.01.2017