为什么 clang 缺少参数包错误的默认参数?
Why clang missing default argument on parameter pack error?
当我使用 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;
}
我得到:
main.cpp:4:30: error: missing default argument on parameter 'aArgs'
但标准说 default arguments:
In a function declaration, after a parameter with a default argument,
all subsequent parameters must have a default argument supplied in this or a previous declaration from the same scope
(since c++11) ...unless the parameter was expanded from a parameter pack
or be a function parameter pack.
这是一个 clang 错误?
提示:我在 gcc 上试了一下,效果很好
是的,这是一个错误:https://bugs.llvm.org/show_bug.cgi?id=23029。
已在 clang 11 中修复:https://reviews.llvm.org/rGb5f2c4e45b8d54063051e6955cef0bbb7b6ab0f8
当我使用 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;
}
我得到:
main.cpp:4:30: error: missing default argument on parameter 'aArgs'
但标准说 default arguments:
In a function declaration, after a parameter with a default argument, all subsequent parameters must have a default argument supplied in this or a previous declaration from the same scope (since c++11) ...unless the parameter was expanded from a parameter pack or be a function parameter pack.
这是一个 clang 错误?
提示:我在 gcc 上试了一下,效果很好
是的,这是一个错误:https://bugs.llvm.org/show_bug.cgi?id=23029。
已在 clang 11 中修复:https://reviews.llvm.org/rGb5f2c4e45b8d54063051e6955cef0bbb7b6ab0f8