G ++ 4.5错误:无法诊断缩小初始化列表

时间:2010-08-22 13:37:24

标签: c++ g++ c++11 narrowing

我尝试了以下代码:

int main()
{
   int x {23.22};
}

包括需要缩小的初始化,但代码编译正常,没有任何错误或警告。另一方面,以下代码给出错误:

int main()
{
   int x[]{23.22};
}

我发现了一个错误或什么?

PS:我目前正在使用GCC 4.5.0

2 个答案:

答案 0 :(得分:7)

看起来像个错误。以下内容直接来自n3092草案:

  

8.5.4列表初始化

     

- 否则,如果是初始化列表   有一个元素,对象是   从该元素初始化;如果一个   缩小转换率(见下文)是   需要将元素转换为T,   该计划格式不正确。

int x1 {2}; // OK
int x2 {2.0}; // error: narrowing

您可以查看GCC的C ++ 0X合规性here.初始化列表(N2672)的状态为“是” - 但请注意,这仅仅是实验性的(因此您可以期待错误)。

bug report更新:GCC会发出-Wconversion标记的警告(-Wall不会涵盖此内容)。

答案 1 :(得分:0)

由于仍在实现C ++ 0x支持,即使根据标准应该存在错误或警告,但是没有,这不会使它成为必然的错误,只是尚未实现。如果自实施该特定功能以来标准草案已经更改,也可能发生这种情况。

使用正在进行中的软件或标准的事实是,根据最新规范应该存在的事物不会。