Соответствие std :: index_sequence аргументу по умолчанию - PullRequest
0 голосов
/ 29 мая 2019

Допускается ли следующее при выводе аргумента шаблона или это неконтролируемый контекст?

#include <utility>
#include<tuple>

template<std::size_t... I>
auto make(std::index_sequence<I...> = std::make_index_sequence<2>())
{
    return;
}

int main() {
    make();
}

Предупреждение о компиляции довольно странное

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Аргументы по умолчанию не являются частью вывода.

Таким образом, вы не можете делать то, что вы хотите здесь (таким образом).

Если необходимо, вы можете сделать:

template <typename Seq = std::index_sequence<0, 1>>
auto make(Seq = std::make_index_sequence<2>())
{
    /*...*/
}
0 голосов
/ 29 мая 2019

Для чего это стоит, это составляет:

template<std::size_t... I>
auto make(std::index_sequence<I...> = std::make_index_sequence<sizeof... (I)>())

но, вероятно, не делает то, что вы хотите.

...