https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62244

            Bug ID: 62244
           Summary: Function parameter should be in scope in its own
                    default argument
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zeratul976 at hotmail dot com

Consider the following code:

int a;
void f(int a = a);

GCC accepts this code, and name lookup for the 'a' in the default argument
finds the global variable 'a' (as suggested by the fact that if the global
variable 'a' is commented out, GCC now gives "error: 'a' was not declared in
this scope").

I believe this in incorrect. During name lookup for the 'a' in the default
argument, the parameter 'a' should already be in scope, since
[basic.scope.pdecl]/p1 says that "The point of declaration for a name is
immediately after its complete declarator and before its initializer (if any)".

Once name lookup finds the parameter, the program should then be ill-formed,
because [dcl.fct.default]/p9 says "parameters of a function shall not be used
in a default argument".

Note that GCC has the correct behaviour when a later parameter's default
argument references an earlier parameter:

int a;
void f(int a, int b = a);  // error: local variable 'a' may not appear in this
context

The incorrect behaviour only occurs when a parameter's own default argument
references the parameter.

Note that clang rejects the first example with "error: default argument
references parameter 'a'".

Reply via email to