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

时间:2013-09-27 03:12:28

标签: c++ visual-c++ compiler-errors expression standards

#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。这是编译器错误吗?

更新

我已经向connect.microsoft.com

提交了一个错误

1 个答案:

答案 0 :(得分:3)

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

您可以查看标准中的语法:

new-placement:
( expression-list )

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