https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85808
Bug ID: 85808 Summary: [concepts] unqualified name lookup breaks after qualified lookup in nested requirement Product: gcc Version: 8.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: Casey at Carter dot net Target Milestone: --- Compiling this program fragment with "g++ -std=c++17 -fconcepts" (https://godbolt.org/g/EXDoD3): namespace X { template<class> constexpr bool x = true; } template<int> using helper = void; template<typename T> concept bool C = requires { requires X::x<T>; #ifndef WORKAROUND typename helper<T{}>; #else typename ::helper<T{}>; // Workaround #endif }; static_assert(C<int>); produces diagnostics: <source>:11:14: error: 'X::helper' has not been declared typename helper<T{}>; ^~~~~~ <source>:11:24: error: expected ';' before '>' token typename helper<T{}>; ^ ; <source>:11:24: error: expected '}' before '>' token <source>:8:27: note: to match this '{' concept bool C = requires { ^ <source>:11:25: error: expected primary-expression before ';' token typename helper<T{}>; ^ <source>:15:1: error: expected declaration before '}' token }; ^ rather than the expected successful and silent compile.