Взятие адреса 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 &
}
Другие вопросы по тегам