vso*_*tco 6 c++ gcc clang placement-new internal-compiler-error
玩数组的新位置,我出现(偶然/错误)使用以下代码:
#include <new>
struct X{};
int main()
{
char buf[256];
std::size_t n = 10;
X* p = new (buf) (X[n]); // incorrect way, parenthesis by mistake
//X* p = new (buf) X[n]; // correct way
}
Run Code Online (Sandbox Code Playgroud)
第三行main
是不正确的,虽然它编译.不应该有任何括号.clang ++吐出来
警告:当类型在括号中时,数组不能具有动态大小
而gcc6输出
警告:ISO C++禁止可变长度数组[-Wvla] X*p = new(buf)(X [n]);
警告:必须在type-id周围没有括号的情况下指定非常量数组的新长度[-Wvla] X*p = new(buf)(X [n]);
然后在tree.h:4044中的tree_to_uhwi中使用内部编译器错误(ICE)崩溃.内部编译器错误仅出现在gcc> = 6中.
我的问题:如何解析/解释标记为"不正确"的行,为什么这些括号"错误"?*
*对于ICE,无论如何我都会填写一个bug.
编辑1我刚刚意识到ICE /警告与用户定义的类型无关,因此观察到相同的行为int
而不是struct X
.
编辑2 gcc6错误填写在这里.ICE不会出现在gcc5或更早版本中(仅出现警告,这是正确的).
归档时间: |
|
查看次数: |
808 次 |
最近记录: |