#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 提交了一个错误
最佳答案
是的,这是一个编译器错误,语法是正确的。
可以看看标准中的语法:
new-placement:
( expression-list )
并且,a.~A(), &a
作为表达式列表是有效的。
关于c++ - 为什么逗号表达式用作放置参数时不能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042093/