Lambda转换函数指针比较

Pas*_* By 8 c++ lambda language-lawyer

简单地说,以下断言是否会引发火灾?

template<typename T>
auto destructor()
{
    return +[](void* p){
        ((T*)p)->~T();
    };
}

assert(destructor<int>() != destructor<char>());
Run Code Online (Sandbox Code Playgroud)

标准似乎只是说lambda转换函数指针与lambda本身做同样的事情,然后你意识到简单的破坏类型都有无操作析构函数,因此是相同的.

Oli*_*liv 4

[expr.prim.lambda]/6 :

此转换函数返回的值是函数 F 的地址,调用该函数时,与调用闭包类型的函数调用运算符具有相同的效果。

指向的函数是根据其行为而不是其标识来指定的。因此,尚不清楚该断言是否会触发。