https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121858

            Bug ID: 121858
           Summary: function_ref(nontype_t<__fn>, _Up&& __ref) did not
                    consider that _Up is a reference_wrapper
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hewillk at gmail dot com
  Target Milestone: ---

This constructor invokes the member pointer on a pointer to object _Up when _Fn
is a member pointer.

However, _Up can be a std::reference_wrapper because std::invoke supports
wrapping objects with std::ref. In this case, the call is ill-formed.

The following case is valid and should print hello:

#include <functional>

struct S { void f(); };

int main() {
  S s;
  auto sr = std::ref(s);
  std::function_ref<void()> fr(std::nontype<&S::f>, sr);
  fr();
}

https://godbolt.org/z/4P1Eo17oj

Reply via email to