https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102802
Bug ID: 102802 Summary: Selection of inherited operator contrary to `using` clause in C++ Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- This program is invalid: ``` using A = decltype([](int){ return 1; }); using B = decltype([](){ return 2; }); struct S : A, B { using A::operator(); }; int main() { S s; static_assert( s() == 2 ); // erroneously passes in GCC and Clang } ``` It must be rejected because A::operator(int) takes 1 argument and B::operator() shall not be considered. Only MSVC correctly rejects it now: https://gcc.godbolt.org/z/x6x3aWzoq Related discussion: https://stackoverflow.com/q/69601650/7325599