The goal here is to exercise each rule in [basic.lookup.argdep] at least once. These new tests expose what I believe are 2 issues:
- CWG 1691 needs to be implemented (p2: [...] Its associated namespaces are the innermost enclosing namespaces of its associated classes [...]) The corresponding tests are adl_class_type::X2 and adl_class_type::X5.
- The end of paragraph 2 ([...] Additionally, if the aforementioned set of overloaded functions is named with a template-id, its associated classes and namespaces also include those of its type template-arguments and its template template-arguments.) is not implemented. Closely related, the restriction on non-dependent parameter types in this same paragraph needs to be removed. The corresponding tests are in adl_overload_set. (both issues are from CWG 997).
Do you also have a test somewhere to verify that the parameter and return types of a lambda's operator() do not contribute to the associated types of the lambda type itself? That is,
// https://godbolt.org/z/g_oMOA namespace N { struct A {}; template<class T> constexpr int f(T) { return 1; } } constexpr int f(N::A (*)()) { return 2; } constexpr int f(void (*)(N::A)) { return 3; } void test() { constexpr auto lambda = []() -> N::A { return {}; }; static_assert(f(lambda) == 2); constexpr auto lambda2 = [](N::A) {}; static_assert(f(lambda2) == 3); }Clang does handle this correctly; I'm just asking for it to be tested, if it's not already. (I might have overlooked an existing test.)