繁体   English   中英

混合可变参数模板值和可变参数推导类型

[英]Mixing variadic template values and variadic deduced types

以下是标准的完美定义吗?

#include <iostream>

template <unsigned int... Values, class... Types>
void f(Types&&... values)
{
    std::cout<<sizeof...(Values)<<" "<<sizeof...(Types)<<std::endl;
}

int main()
{
    f<7, 5>(3);
    return 0;
}

它在g++ 4.8下编译得很好,但我想知道它是否正常。

ISO C ++标准的当前工作草案 14.1(11):

函数模板的模板参数包不能跟随另一个模板>参数,除非该模板参数可以从>函数模板的参数类型列表中推导出来或者具有默认参数

在您的情况下,'Types'是一个函数参数包 ,'Values',即模板参数包 ,可以随后跟一个函数参数包 此代码的作用也是出于同样的原因:

#include <iostream>

template <class... Values, class... Types>
void f(Types&&... values)
{
    std::cout<<sizeof...(Values)<<" "<<sizeof...(Types)<<std::endl;
}

int main()
{
    f<int, float>(-3, 5);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM