当前位置:  开发笔记 > 编程语言 > 正文

默认参数和参数包之间的交互(GCC和clang不同意)

如何解决《默认参数和参数包之间的交互(GCC和clang不同意)》经验,为你挑选了1个好方法。

我希望编译以下代码:

#include 

template 
void print(T val = T{}, Args... args) {
    std::cout << val << ' ' << sizeof...(args) << std::endl;
}

int main() {
    print();
    print(3.14);
    print(0, 1, 2);
}

尽管有unused-but-set-parameter警告,它在GCC 5.2(C++ 11)上编译,但是clang 3.6(C++ 11)给出了以下错误消息:

main.cpp:4:33: error: missing default argument on parameter 'args'
void print(T val = T{}, Args... args) {
                                ^
main.cpp:11:5: note: in instantiation of function template specialization 'print' requested here
    print(0, 1, 2);
    ^
main.cpp:4:33: error: missing default argument on parameter 'args'
void print(T val = T{}, Args... args) {
                                ^
2 errors generated.

那么,谁是正确的?



1> Lightness Ra..:

从某种意义上说,它们都是正确的.

标准CWG 1609中存在一个错误,不清楚代码是否格式正确.

在CWG摘要中,似乎已经达成共识,即clang 在拒绝代码方面应该是正确的.然后,几个月后,人们一致认为GCC 在接受代码方面应该是正确的.那么谁知道C++中会发生什么17.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有