g ++和clang ++不同的行为与C类型的类类型数组的初始化

max*_*x66 8 c++ arrays g++ language-lawyer clang++

我想这是一个g ++ bug,但我要求确认.

以下代码:

#include <complex>
#include <iostream>

int main()
{
    std::complex<double>  ac[10] = 23.5;

    for (int i = 0; i < 10; ++i)
        std::cout << ac[i] << ", ";

    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无法在clang ++ 3.5上编译

"错误:数组初始化程序必须是初始化程序列表")

但用g ++ 4.9.2编译,没有错误或警告.

g ++编译的可执行文件的输出是

(23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0),
Run Code Online (Sandbox Code Playgroud)

所以这个数组初始化

std::complex<double>  ac[10] = 23.5;
Run Code Online (Sandbox Code Playgroud)

使用等号右边的值作为数组的每个元素的初始化(并且,我认为,如果它是标准接受的特征,则可能是有用的)

如果我用std::complex<double>数组替换double数组

double  ac[10] = 23.5;
Run Code Online (Sandbox Code Playgroud)

g ++给出了类似于clang ++的错误:

"错误:数组必须用括号括起的初始化程序初始化".

另一种情况:一组向量

std::vector<double>  ac[10] = std::vector<double>(3, 0.5) ;
Run Code Online (Sandbox Code Playgroud)

g ++编译它(并初始化数组中的每个向量)和clang ++给出通常的错误.

所以我认为这是一个g ++错误,仅在初始化类(struct?)类型的数组时才会发生.我要求确认.