[Bug c++/94679] link time error: undefined reference to std::projected<...>::operator *() const

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 21 08:41:12 GMT 2020


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


More information about the Gcc-bugs mailing list