у метода класса перегрузка происходит за счет ссылочного квалификатора?
struct A {
void f(int val) & { std::cout << "A::f(int) & \n"; }
void f(int val) && { std::cout << "A::f(int) && \n"; }
};
В случае с функциональным объектом, имеющего перегруженный operator() для & и && , std::invoke справляется легко, а с методом класса выдает ошибку - нет подходящей перегрузки. ( std::move так же не помогает )
а покажи вызов invoke
std::invoke(&A::f, obj, 1); // std::move(obj) тоже не дает подсказки, что нужна в данном случае версия с &&
Как минимум, есть лямбды, но вопрос интересный
Что-то вида std::invoke(static_cast<Ret(Types...) &&>(&A::f), move(obj) , 1)
std::invoke(static_cast<void (A::*)(int)&&>(&A::f), std::move(a), 10);
с кастингом работает, спасибо за помощь!
Обсуждают сегодня