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

Reply via email to