获取 boost::hana::partial::operator() 的地址

Taking the address of boost::hana::partial::operator()

假设我有一个执行某些操作的 lambda:

auto thing = [](int x){ /* Stuff */ };

我想保存值 "x" 并稍后调用它,所以我这样做:

auto other = boost::hana::partial(thing, 42);

现在,因为我想对此进行一些类型擦除,所以我想获取 operator() 的地址......所以我尝试这样做:

using type = decltype(other);
void (type::*ptr)(void) = &type::operator();

Clang 抱怨说,other 对象的功能不足以满足要求:godbolt

似乎 partial 类型正在返回一个引用(对 void?)......为什么这不起作用?

它(operator())有 & const& && 等重载;您的成员函数指针不符合 const 或 r/l 值的 *this。所以不匹配。

在编译失败的行=前添加&const&&&const&&,即可编译。

这是一个[MCVE]:

struct foo {
    void bar()&{}
};

int main(){
    auto p = &foo::bar;
    void(foo::*p2)() = p; // lacks &
}