我的编译器是最新的 VC++ 2013 预览版。(更新了!)
#include <new>
struct A
{
A(int)
{}
};
void f(void (*fn)(void*))
{
A a(0);
fn(&a);
}
int main()
{
int n = 0;
auto fn = [&](void* p)
{
//
// error C2664: 'void f(void (__cdecl *)(void *))' :
// cannot convert parameter 1 from
// 'main::<lambda_b20f735b061d78dbb0f2f653ecbb482f>'
// to 'void (__cdecl *)(void *)'
//
new (p) A(n);
};
f(fn);
}
为什么不允许这种用法?
这种行为是否由标准定义?如果是,理由是什么?