C++ 从默认参数推断参数包

C++ 从默认参数推断参数包,c++,c++17,variadic-templates,template-meta-programming,template-argument-deduction,C++,C++17,Variadic Templates,Template Meta Programming,Template Argument Deduction,编译器是否可以从函数的默认参数推导出参数包?特别是,我有以下代码: 模板结构seq{}; 模板结构制作_seq; 模板 结构制造 { 使用type=typename make_seq::type; }; 模板 结构制造 { 使用类型=seq; }; 模板 使用make_seq_t=typename make_seq::type; 模板 int-pack(seq s=make_seq_t{}) { 返回…的大小(Is); } int main() { 返回参数包(); } 编译器将参数包推断为

编译器是否可以从函数的默认参数推导出参数包?特别是,我有以下代码:


模板结构seq{};
模板结构制作_seq;
模板
结构制造
{
使用type=typename make_seq::type;
};
模板
结构制造
{
使用类型=seq;
};
模板
使用make_seq_t=typename make_seq::type;
模板
int-pack(seq s=make_seq_t{})
{
返回…的大小(Is);
}
int main()
{
返回参数包();
}
编译器将参数包推断为空,并尝试将默认参数强制转换为空。相反,我希望实现类似的行为:

intmain()
{
退货包装(按顺序制作);
}
其中,推导出的参数包为
0,1,2,3,4
,而不显式传入此参数


编译器是否可以从函数的默认参数推导出参数包

不,据我所知

但是。。。不完全是你要求的。。。但是,也许您可以找到以下基于结构部分专门化的解决方案

template <std::size_t N, typename = std::make_index_sequence<N*N>>
struct deduceParamPackStruct;

template <std::size_t N, std::size_t ... Is>
struct deduceParamPackStruct<N, std::index_sequence<Is...>>
 {
   static constexpr std::size_t func ()
    { return sizeof...(Is); }
 };
模板
结构参数packstruct;
模板
结构参数packstruct
{
静态constexpr std::size\u t func()
{return sizeof…(Is);}
};
您可以按如下方式使用它

static_assert( 25 == deduceParamPackStruct<5>::func() );
static_断言(25==parampackstruct::func());

可以有两个
参数包
的重载,一个带参数,一个不带参数,而不是默认参数。后者将使用适当的默认值调用前者。“编译器是否可以从函数的默认值推导参数包?”-不,据我所知。@IgorTandetnik我实际上是在试图避免编写额外的辅助函数-这就是我第一次达到目的的原因。前者是由于无法在c++17中模板化lambda造成的。这与问题没有直接关系,但请注意,您正在重新创建和
std::make_integer_sequence
@IgorTandetnik问题是我无法在msvc中看到
std::make_integer_sequence
的定义(它使用了类似于
\u make\u integer\u seq;
)的东西,但我认为我应该无论如何使用它。就模板化的lambda而言,它似乎是预览msvc版本+语言标准设置为最新版本所允许的,所以我可以使用它在我的另一个函数中创建一个helper lambda函数。