#include <new>
using namespace std;
void f(void*)
{}
struct A
{};
int main()
{
A a;
f((a.~A(), &a)); // OK
new (&a) A(); // OK
new ((a.~A(), &a)) A(); // error C2059: syntax error : 'type'
}
我认为(a。~A(),&amp; a)是一个有效的表达式,可以将其计算为指针值,因此它应该被接受为放置参数,为什么结果不是这样?
我的编译器是VC ++ 2013 RC。这是编译器错误吗?
更新
提交了一个错误答案 0 :(得分:3)
是的,这是编译错误,语法正确。
您可以查看标准中的语法:
new-placement:
( expression-list )
并且,a.~A(), &a
作为表达式列表有效。