https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94679
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename T> struct projected { T operator*() const; }; struct IMove { template<typename T> decltype(auto) operator()(T&& t) const { return *t; } }; IMove iter_move; template<typename T> concept fooable = requires (T t) { iter_move(t); }; template<typename T> requires fooable<projected<T>> void func(T) { } int main() { int i = 0; func(i); } g++ -std=c++20 use.cc -coverage -fkeep-inline-functions /usr/bin/ld: /tmp/ccS2FlMR.o: in function `decltype(auto) IMove::operator()<projected<int>&>(projected<int>&) const': /tmp/use.cc:13: undefined reference to `projected<int>::operator*() const' collect2: error: ld returned 1 exit status