代码之家  ›  专栏  ›  技术社区  ›  Makogan

Clang不允许在默认参数后使用可变参数,gcc允许

  •  3
  • Makogan  · 技术社区  · 3 年前

    当我使用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开始)。。。除非参数是从参数包展开的 或者是一个函数参数包。

    是叮当的虫子吗?

    提示:我在gcc上试用,效果很好

    0 回复  |  直到 4 年前
        1
  •  5
  •   Ted Lyngmo    4 年前