https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102670
--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>: https://gcc.gnu.org/g:6fa8e0896c6ec96eddcedb2b92502a7bbb525c03 commit r12-5372-g6fa8e0896c6ec96eddcedb2b92502a7bbb525c03 Author: Patrick Palka <ppa...@redhat.com> Date: Thu Nov 18 10:04:27 2021 -0500 c++: unqual lookup performed twice w/ template-id ADL [PR102670] Here we're incorrectly performing unqualified lookup of 'adl' again at substitution time for the call adl<I>(t) (for which name lookup at parse time found nothing) which causes us to reject the testcase because the second unqualified lookup finds the later-declared variable template 'adl', leading to confusion. Fixed thusly. The testcase concepts-recursive-sat1.C needed to be adjusted to use ADL proper instead of relying on this incorrect second unqualified lookup. PR c++/102670 gcc/cp/ChangeLog: * pt.c (tsubst_copy_and_build) <case CALL_EXPR>: When looking for an identifier callee in the koenig_p case, also look through TEMPLATE_ID_EXPR. Use tsubst_copy to substitute through the template arguments of the template-id. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-recursive-sat1.C: Adjust to use ADL proper. * g++.dg/cpp2a/fn-template23.C: New test.