Взятие адреса boost::hana:: частичного::operator()
Предположим, у меня есть лямбда, которая делает что-то:
auto thing = [](int x){ /* Stuff */ };
Я хочу сохранить значение "х" и вызвать его позже, поэтому я делаю:
auto other = boost::hana::partial(thing, 42);
Теперь, потому что я хочу сделать какое-то удаление типа, я хочу взять адрес operator()
..... поэтому я пытаюсь сделать это:
using type = decltype(other);
void (type::*ptr)(void) = &type::operator();
Clang жалуется, что other
объект не является достаточной функцией, соответствующей требованиям: godbolt
Похоже, что partial
Тип возвращает ссылку (на void
?)...... почему это не работает?
1 ответ
Решение
Имеет (оператор ()) &
const&
&&
и т. д. перегрузки; указатель на функцию-член не подходит *this
по постоянному или r/l-значению. Так что не совпадает.
добавлять &
или же const&
или же &&
или же const&&
до =
на линии, которая не компилируется, и она будет компилироваться.
Вот [MCVE]:
struct foo {
void bar()&{}
};
int main(){
auto p = &foo::bar;
void(foo::*p2)() = p; // lacks &
}