-1

내 비주얼 스튜디오 2017 이뤄져이 코드 및 이뤄져 컴파일의 형태 추론 가이드 인식 안내 : 비록왜 내 비주얼 스튜디오 2017 컴파일러가 인식하지 못하는 C++ 17 형 공제

template<typename T> 
class Example{ 
public: 
    Example(T& pVal) 
     :val(pVal){} 
    T& val; 
}; 
//type deduction guide for Example constructor 
template<typename T> 
Example(T&)->Example<T>; 

을, 내 sources에 따르면, 이것은 C++ 17 유형 공제 가이드에 대한 올바른 구문이어야하며 가이드해야하는 클래스와 동일한 범위에서 정의됩니다.

이 기능을 인식하도록 Visual Studio C++ 컴파일러를 수정하려면 어떻게해야합니까?

+4

Visual Studio 버전에 대한 C++ 1z 지원을 확인 했습니까? 컴파일러는 기능을 추가해야합니다. 마술처럼 새로운 표준 개정안을 알지 못합니다. – StoryTeller

+6

[사례 및 요지] (https://blogs.msdn.microsoft.com/vcblog/2017/05/10/c17-features-in-vs-2017-3/) : ** 클래스 템플릿에 대한 템플릿 인수 공제 * * status - NO. – StoryTeller

+2

다음은 [공식 문서] (https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance)와 (일반적으로 최신) [cppreference의 페이지] (http : //en.cppreference.com/w/cpp/compiler_support) – UnholySheep

답변

1

컴파일러를 업그레이드하십시오.

우선 기다려주세요. 릴리스 노트를 읽으면 업데이트 3, 4 또는 5에 대한 미리보기에 표시되지 않습니다.

지원은 실험적이고 불완전합니다. 지원은 (대부분 SFINAE 주변의) 불완전한 상태로 남아 있지만 더 이상 실험적이지 않습니다.

비주얼 스튜디오에는 하이브리드 clang 및 microsoft 컴파일러가 함께 제공됩니다. 은 MSVC가 clang 5.0 컴파일러로 업데이트 할 때이를 지원해야합니다 (마지막으로 3.8이라고 확인했습니다).

Clang 5 LLVM (Windows 용)은 다운로드 할 수 있지만 Visual Studio와의 통합은 어렵습니다. 원하는 작업 중 일부는 단순히 작동하지 않을 수 있습니다. 그러나 공제 가이드를지지합니다.

Clang 5를 사용하기 위해 Visual Studio를 수정하는 것은 약간의 작업입니다. 한 가지 할 수있는 일은 종속성 및 프로젝트 설명 파일에서 vcproj와 makefile을 빌드하는 시스템을 작성하는 것입니다. makefile을 사용하여 빌드하고, vcproj는 단순히 코드를 편집 할 때 intellisense (내가 생각하는 공제 가이드를 이해하지 못함)를 활성화합니다. (파이썬, 배치 파일, 메이크 파일 자체, 때로는 C#의 조합과 비슷한 수준에서 작업했습니다.)

이것은 (자체 빌드 체인 생성) 자체 프로젝트입니다.

내가 일을 본 적이 또 다른 방법은 vcproj 파일을 생성하는 것입니다, 그리고 메이크에게의 손으로 공예. 프로젝트 디렉토리 구조가 충분히 간단하다면 intellisense를 수행 할 수있을 정도로 vcproj를 작성하는 것이 어렵지 않을 것입니다.

+2

인텔 C++ 컴파일러는 상자에서 VS 통합을 가지며 C++ 14/17 필드에서도 더 나은 작업을 수행합니다. 그것은 몇 가지 기능이 부족합니다 (또는 일부 구성 요소에 버그가 있음). –

+0

불행히도 Clang/C2는 업데이트를받지 못합니다. https://developercommunity.visualstudio.com/content/problem/34693/clangc2-version-getting-old.html#reply-167512 –