Hi!
C++ has rather complex name lookup rules for unqualified function calls that involve argument-dependent lookup and may lead to surprising results. And from time to time there appear proposals to fix those rules. This is one of such proposals.
Most of the time invoking ADL is not what a user wanted. However, ADL also has legitimate use cases: operators and "customization points" (swap, begin, end are examples).
The idea of the proposal is that we can mark customization points with operator keyword and deprecate ADL for all functions that are not marked with such keyword.
That is if ADL was triggered for an unqualified function call and a function was found via ADL that was not an operator, then a compiler may issue a warning. Currently it's not feasible to have such a warning, because we cannot not discriminate between "good" ADL and "bad" ADL.
Declaration of a custom swap function then will look like this:
void operator swap (A& fst, A& snd);
There are other things that might be included in the proposal:
1) requesting ADL via operator keyword at the call-site: operator swap(a, b);
2) searching "operator functions" among class members, thus allowing uniform function call syntax at least for them.
But before exploring those directions further I would like to get feedback on the main idea.
Regards,
Gregory