【问题标题】:Why clang missing default argument on parameter pack error?为什么在参数包错误中缺少默认参数?
【发布时间】:2020-10-21 11:19:34
【问题描述】:

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

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

这是一个clang错误?

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

【问题讨论】:

标签: c++ clang clang++


【解决方案1】:

【讨论】:

  • 我正在更改我的编译器以获得更多错误,但我的项目因此无法使用 clang 编译...
  • @IsaacPascual 这很不幸。如果您想继续使用 clang,可以尝试将函数模板一分为二:godbolt.org/z/aTrv7q
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 2016-06-08
  • 2017-12-09
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多