相关疑难解决方法(0)

参数包函数参数可以默认吗?

这是关于gcc 4.9.2和clang 3.5.2存在尖锐分歧的一点.该程序:

template<typename ...Ts>
int foo(int i = 0, Ts &&... args)
{
    return i + sizeof...(Ts);
}

int main()
{
    return foo();
}
Run Code Online (Sandbox Code Playgroud)

编译没有gcc(-std=c++11 -Wall -pedantic)的评论.Clang说:

error: missing default argument on parameter 'args'
Run Code Online (Sandbox Code Playgroud)

随着foo修订为:

template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
    return i + sizeof...(Ts);
}
Run Code Online (Sandbox Code Playgroud)

clang没有抱怨,但gcc说:

error: parameter pack ‘args’ cannot have a default argument
Run Code Online (Sandbox Code Playgroud)

哪个编译器是对的?

c++ gcc clang variadic-templates c++11

24
推荐指数
2
解决办法
3644
查看次数

标签 统计

c++ ×1

c++11 ×1

clang ×1

gcc ×1

variadic-templates ×1