c++17 聚合初始化

c++17 Aggregate Initializations

我正在观看 Jason Tuner 在 youtube 上的一个视频系列以及在此处找到的这个特定视频:Aggregate Initializations 他开始使用 clang++ c++03 然后将编译器更改为 clang++ c++11 然后当他合并了基础 class 层次结构,他使用最近构建的 clang++ 将其更改为使用 c++17 或 c++1z。

我最近刚刚下载并安装了 MSVS2017RC,我是 运行 Windows Intel Quad Core Extreme 上的 7 64 位 SP1。

然而,当我在我的 IDE

中尝试关注他的视频时
struct B {
    double q;
};

struct S : B {
    int i;
    float f;
};

int main() {
    S s{ {}, 1, 2.3f };
    return s.f;
}

我收到这个编译器错误:

1>------ Build started: Project: Test1z, Configuration: Debug Win32 ------
1>stdafx.cpp
1>Test1z.cpp
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): error C2440: 'initializing': cannot convert from 'initializer list' to 'S'
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(16): warning C4244: 'return': conversion from 'float' to 'int', possible loss of data
1>Done building project "Test1z.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Visual Studio2017 是否支持 c++17 中的这些功能?如果是这样,是否需要在项目属性中设置特殊的编译器选项?或者这目前是 clang 或 gcc 独有的吗?如果这应该是 c++17 编译器,MS 编译器错误 C2440 的主要原因是什么?

Visual Studio 2017 does not support all, or most, of C++17 目前。它不支持的事情之一是基 类.

的聚合初始化