简单地说,以下断言会不会发生?
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,然后你意识到简单的破坏类型都有无操作析构函数,因此是相同的。
答案 0 :(得分:4)
此转换函数返回的值是函数F的地址,在调用时,它与调用闭包类型的函数调用操作符具有相同的效果。
指向的函数是根据其行为来指定的,而不是根据其身份来指定。因此,如果此断言将触发,则未指定。