为什么逗号表达式在用作放置参数时不能按预期工作?

xml*_*lmx 10 c++ standards expression compiler-errors visual-c++

#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'
}
Run Code Online (Sandbox Code Playgroud)

我认为(a.~A(),&a)是一个有效的表达式,可以计算为指针值,因此它应该被接受为放置参数,为什么结果不是这样?

我的编译器是VC++ 2013 RC.这是编译器错误吗?

更新:

我已经向connect.microsoft.com提交了一个错误

Jes*_*ood 3

是的,这是一个编译器错误,语法是正确的。

你可以看一下标准中的语法:

new-placement:
( expression-list )
Run Code Online (Sandbox Code Playgroud)

并且,a.~A(), &a作为表达式列表是有效的。