Почему выражение запятой не работает должным образом при использовании в качестве аргумента размещения?

#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) является допустимым выражением, которое может быть оценено до значения указателя, поэтому оно должно приниматься как аргумент размещения, почему результат не так?

Мой компилятор - VС++ 2013 RC. Является ли это ошибкой компилятора?

Update:

Я выслал ошибку в connect.microsoft.com

Ответ 1

Да, это ошибка компилятора, правильный синтаксис.

Вы можете посмотреть грамматику в стандарте:

new-placement:
( expression-list )

И a.~A(), &a действует как список выражений.