Lambda 转换的函数指针比较



简单地说,下面的断言会触发吗?

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

该标准似乎只说 lambda 转换的函数指针与 lambda 本身执行相同的操作,然后您意识到琐碎的类型都具有无操作析构函数,因此是相同的。

[expr.prim.lambda]/6:

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

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

最新更新