6

When I use clang (10.0.1) to compile that:

#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;
}

I get:

main.cpp:4:30: error: missing default argument on parameter 'aArgs'

But standard say about 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.

It is a clang bug?

hint: I try it on gcc and works fine

Isaac Pascual
  • 472
  • 2
  • 14
  • I think is same error on https://stackoverflow.com/questions/57309103/missing-default-argument-on-trailing-parameter-pack-on-clang but simplified case – Isaac Pascual Oct 21 '20 at 11:22

1 Answers1

7

Yes, it's a bug: https://bugs.llvm.org/show_bug.cgi?id=23029.

It's fixed in clang 11: https://reviews.llvm.org/rGb5f2c4e45b8d54063051e6955cef0bbb7b6ab0f8

Ted Lyngmo
  • 93,841
  • 5
  • 60
  • 108
  • I was changing my compiler to get more errors but my project dont compile with clang due to that... – Isaac Pascual Oct 21 '20 at 11:40
  • @IsaacPascual That's unfortunate. You could try splitting the function template up in two if you'd like to continue with clang: https://godbolt.org/z/aTrv7q – Ted Lyngmo Oct 21 '20 at 12:07