默认参数匹配 std::index_sequence

Matching std::index_sequence by default argument

本文关键字:index sequence std 参数 默认      更新时间:2023-10-16

模板参数推导是否允许以下内容,还是未推导的上下文?

#include <utility>
#include<tuple>
template<std::size_t... I>
auto make(std::index_sequence<I...> = std::make_index_sequence<2>())
{
    return;
}
int main() {
    make();
}

编译警告很奇怪

默认参数不是演绎的一部分。

所以你不能在这里做你想做的事(那样(。

如果合适,您可以执行以下操作:

template <typename Seq = std::index_sequence<0, 1>>
auto make(Seq = std::make_index_sequence<2>())
{
    /*...*/
}

对于它的价值,它编译:

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

但可能不会做你想做的事。