VS2015拒绝未命名类型的类内初始化

时间:2015-11-21 15:57:32

标签: c++ visual-studio visual-c++ visual-studio-2015

以下代码无法在VS2015中编译。

struct Foo
{
    Foo(int value) { }
};

struct Moo
{
    struct
    {
        Foo foo = 0;
    } fooHolder;
};


int main()
{
    Moo moo;
}

显示以下错误。

1>c:\xxx\main.cpp(81): error C2512: 'Foo' : no appropriate default constructor available
1>          This diagnostic occurred in the compiler generated function 'Moo::<unnamed-type-fooHolder>::(void) restrict(cpu, amp)'

如果为未命名的结构命名,则代码将编译。

struct NamedHolder
{
    Foo foo = 0;
} fooHolder;

用clang和gcc编译的代码。 http://coliru.stacked-crooked.com/a/3b4ab035a967eed9

是否拒绝有效代码?

1 个答案:

答案 0 :(得分:1)

此代码完全正常,它使用VS2015 Update 1 RC(刚验证)进行编译。也许你错过了什么。我测试的系统:

  

Microsoft Visual Studio Community 2015

     

版本14.0.24627.00更新1 RC

     

Microsoft .NET Framework

     

版本4.6.01040

     

已安装版本:社区

     

Visual C ++ 2015 RC 00322-20000-00000-AA392   Microsoft Visual C ++ 2015 RC

     

...