-1

My Visual Studio 2017 ne le ferai pas reconnaître le guide de déduction de type dans ce code et la compilation ne le ferai pas:Pourquoi mon compilateur Visual Studio 2017 reconnaît pas la déduction de type 17 C++ guide

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

Même si, selon mon sources, ceci devrait être la syntaxe correcte pour un guide de déduction de type C++ 17 et il est défini dans la même portée que la classe qu'il devrait guider. Comment puis-je modifier mon compilateur Visual Studio C++ pour reconnaître cette fonctionnalité?

+4

Avez-vous vérifié le support de C++ 1z pour votre version de Visual Studio? Les compilateurs doivent ajouter des fonctionnalités. Ils ne sont pas magiquement informés des nouvelles révisions standard. – StoryTeller

+6

[Cas et point] (https://blogs.msdn.microsoft.com/vcblog/2017/05/10/c17-features-in-vs-2017-3/): ** Déduction d'argument de modèle pour les modèles de classe * * statut - NON – StoryTeller

+2

Et voici la [documentation officielle] (https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance) et la (habituellement à jour) [page de cppreference] (http : //fr.cppreference.com/w/cpp/compiler_support) – UnholySheep

Répondre

1

Mettez à jour votre compilateur.

Bien attendre en premier. En lisant les notes de version, je ne le vois pas dans la mise à jour 3, 4 ou l'aperçu pour 5.

le support dans MSVC reste expérimental et incomplet. Le support et reste simplement incomplet (surtout autour de SFINAE), mais n'est plus expérimental.

Le studio visuel est livré avec un compilateur hybride clang et microsoft. devrait supporter ceci quand MSVC le mettra à jour dans le compilateur clang 5.0 (la dernière fois que je l'ai vérifié était 3.8).

Clang 5 LLVM pour les fenêtres peuvent être téléchargés, mais son intégration avec Visual Studio est difficile et certaines choses que vous voulez faire ne peuvent tout simplement pas fonctionner. Mais il supporte les guides de déduction. Modifier le studio visuel pour utiliser Clang 5 est plus qu'un peu de travail. Une chose que vous pourriez faire est d'écrire un système pour construire à la fois vcproj et makefile à partir de certains fichiers de description de projet et de dépendance. Utilisez les makefiles pour construire, et le vcproj simplement pour activer intellisense (qui ne comprendra pas vos guides de déduction je crois) lors de l'édition du code. (J'ai travaillé à des endroits qui font l'équivalent approximatif de ces combinaisons de python, fichiers batch, makefiles eux-mêmes, et parfois même C#).

Ceci (créant votre propre chaîne de construction) est un projet en soi.

Une autre approche que j'ai vu le travail est de générer les vcproj fichiers et la main-craft le makefile s. Si la structure de votre répertoire de projet est assez simple, écrire un vcproj assez bon pour faire intellisense ne sera pas difficile.

+2

Le compilateur Intel C++ a l'intégration de VS de la boîte et fait également un meilleur travail dans le champ C++ 14/17. Il manque certaines fonctionnalités (ou est buggé sur certaines constructions) cependant. –

+0

Malheureusement, Clang/C2 ne recevra aucune mise à jour https://developercommunity.visualstudio.com/content/problem/34693/clangc2-version-getting-old.html#reply-167512 –