-1

私のVisual Studio 2017 won'tは、このコードとwon'tコンパイルで型推論ガイドを認識ガイド:、はなぜVisual Studioの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/):**クラステンプレートのテンプレート引数の控除* *ステータス - 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でそれを見ることはありませんかMSVC 5.

支援のためのプレビューは、実験や不完全なまま。 のサポートは、(ほとんどはSFINAE周辺の)不完全なままであるだけですが、もはや実験的ではありません。

ビジュアルスタジオにはハイブリッドclangとmicrosoftコンパイラが同梱されています。 は、MSVCがclang 5.0コンパイラにそれを更新するときにこれをサポートしなければなりません(最後に私がチェックしたのは3.8でした)。 Windows用の

Clang 5 LLVMをダウンロードすることができますが、Visual Studioのとの統合は、困難であり、あなたがやりたいいくつかのものは、単に動作しない場合があります。しかし、控除ガイドをサポートしています。

Clang 5を使用するためにビジュアルスタジオを変更することは、少しの作業です。あなたができることの1つは、いくつかの依存関係とプロジェクト記述ファイルからvcprojとmakefileの両方をビルドするシステムを作成することです。ビルドにはmakefileを使い、vcprojは単にコードを編集するときにintellisenseを有効にするだけです(これは私の信じる控除ガイドを理解できません)。 (私は、Python、バッチファイル、makefile自体、そして時にはC#の組み合わせの大まかな動作をする場所で働いています)。

これは(独自のビルドチェーンを作成する)、それ自身のプロジェクトです。

私は仕事を見てきた別のアプローチは、vcprojファイルを生成することであり、メイク Sを手で作ります。プロジェクトのディレクトリ構造が単純であれば、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 –

関連する問題