4

Jason Tuner가 제작 한 비디오 시리즈와 여기에있는 특정 비디오를보고 있습니다 : Aggregate Initializations 그는 clang ++ C++ 03을 사용하기 시작한 후 컴파일러를 clang ++ C++ 11로 변경합니다. 그는 clang ++의 최근 빌드를 사용하여 C++ 17 또는 C++ 1z를 사용하여 기본 클래스 계층 구조를 통합합니다.C++ 17 총체적 초기화

방금 ​​MSVS2017RC를 다운로드하여 설치했으며 인텔 쿼드 코어 익스트림에서 Windows 7 64 비트 SP1을 실행하고 있습니다.

struct B { 
    double q; 
}; 

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

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

내가이 컴파일러 오류가 발생하고 내 IDE에서이 작업을하면서 나는 그의 비디오를 따라갈 때

그러나 : 비주얼 스튜디오 2017는 이러한 기능의 지원을

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 ========== 

가하는 C++ 17에서 찾을 수 있습니까? 그렇다면 프로젝트 속성에서 설정해야하는 특별한 컴파일러 옵션이 있습니까? 아니면 현재 clang 또는 gcc에만 독점적입니까? 이것이 MS의 컴파일러 오류 C2440의 주된 이유는 이것이 C++ 17 컴파일러가되어야하는 경우입니까?

답변

6

Visual Studio 2017 does not support all, or most, of C++17 현재 지원하지 않는 것들 중에는 기본 클래스의 집계 초기화가 있습니다.

+0

설명해 주셔서 감사합니다. MSDN 페이지에서 집계는 괜찮지 만 기본 클래스 나 상속이 아니라고 말했지만 cppreference 웹 사이트는 위에 언급 한 비디오 시리즈에서 볼 수있는 유사한 구문 지원을 보여줍니다. –

+0

@FrancisCugler : Cppreference 페이지에서 VS2017이 그렇게 할 것이라고 말하지 않습니다. 사실, 그 반대의 말입니다. "기본 클래스가있는 클래스의 집계 초기화"에서 Visual Studio에는 큰 빨간색 공간이 있습니다. –

+0

당신이 나를 오해 한 것 같아요. 나는 cppreference가 VS2017에 의해 지원된다고 명시 적으로 말하고있는 것을 의미하지는 않았다. 나는 그것이 C++에 대한 유효한 구문임을 설명하기 만했다. 또한 제공 한 링크의 목록을보고 나서; MS가 곡선을 벗어나기 시작했다. –