当我使用 clang (10.0.1) 编译时:
#include <iostream>
template <typename ...Args>
void f( int a = 4, Args&&... aArgs )
{
std::cout << a << std::endl;
}
int main( int argc, char *argv[] )
{
f( 1, 2 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到:
main.cpp:4:30: error: missing default argument on parameter 'aArgs'
Run Code Online (Sandbox Code Playgroud)
但关于默认参数的标准说法:
在函数声明中,在带有默认实参的形参之后,所有后续形参必须具有在此或同一作用域的前一个声明中提供的默认实参 (C++11 起) ...除非形参是从形参扩展而来包或者是函数参数包。
这是一个叮当声错误吗?
提示:我在 gcc 上尝试了一下,效果很好
是的,这是一个错误:https://bugs.llvm.org/show_bug.cgi ?id=23029 。
它已在 clang 11 中修复:https://reviews.llvm.org/rGb5f2c4e45b8d54063051e6955cef0bbb7b6ab0f8