Lambda转换函数指针比较

时间:2018-01-28 10:15:06

标签: c++ lambda language-lawyer

简单地说,以下断言会不会发生?

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

assert(destructor<int>() != destructor<char>());

标准似乎只是说lambda converted function pointer does the same thing as the lambda itself,然后你意识到简单的破坏类型都有无操作析构函数,因此是相同的。

1 个答案:

答案 0 :(得分:4)

[expr.prim.lambda]/6

  

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

指向的函数是根据其行为来指定的,而不是根据其身份来指定。因此,如果此断言将触发,则未指定。