4

当我使用 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'

但是标准说默认参数

在函数声明中,在带有默认实参的形参之后,所有后续形参都必须在此声明或同一范围内的先前声明中提供默认实参(c++11 起)...除非形参是从形参展开的pack 或成为函数参数包。

这是一个clang错误?

提示:我在 gcc 上试了一下,效果很好

4

1 回答 1

5

是的,这是一个错误:https ://bugs.llvm.org/show_bug.cgi?id=23029 。

它已在 clang 11 中修复:https ://reviews.llvm.org/rGb5f2c4e45b8d54063051e6955cef0bbb7b6ab0f8

于 2020-10-21T11:29:59.597 回答