10
#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(), &a) 是一个可以评估为指针值的有效表达式,所以它应该被接受为放置参数,为什么结果不是这样?

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

更新:

我在connect.microsoft.com上发现了一个错误

4

1 回答 1

3

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

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

new-placement:
( expression-list )

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

于 2013-09-27T03:23:46.780 回答