CWG Issue 12 (original) (raw)

This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2025-11-05


12. Default arguments on different declarations for the same function and the Koenig lookup

Section: 6.5.4 [basic.lookup.argdep]Status: dupSubmitter: Daveed VandevoordeDate: unknown

Given the following test case:

enum E { e1, e2, e3 };

void f(int, E e = e1);
void f(E, E e = e1);

void g() {
    void f(long, E e = e2);
    f(1); // calls ::f(int, E)
    f(e1); // ?
}

First note that Koenig lookup breaks the concept of hiding functions through local extern declarations as illustrated by the call `f(1)'. Should the WP show this as an example?

Second, it appears the WP is silent as to what happens with the call `f(e1)': do the different default arguments create an ambiguity? is the local choice preferred? or the global?

**Tentative Resolution (10/98)**In 6.5.4 [basic.lookup.argdep] paragraph 2, change

If the ordinary unqualified lookup of the name finds the declaration of a class member function, the associated namespaces and classes are not considered.

to

If the ordinary unqualified lookup of the name finds the declaration of a class member function or the declaration of a function at block scope, the associated namespaces and classes are not considered.

Rationale (04/99): The proposal would also apply to local_using-declaration_s (per Mike Ball) and was therefore deemed undesirable. The ambiguity issue is dealt with in Core issue 1