C++17, anciennement connu sous le nom de C++1z, est une norme pour le langage de programmationC++. Elle a été publiée en sous le nom de ISO/CEI 14882:2017.
Le dernier working draft gratuit est le N4659, qui date du , les seules différences avec le standard étant des corrections éditoriales.
Suppression
Cette version de C++ a non seulement ajouté de nouvelles fonctionnalités, mais en a également supprimé quelques-unes.
Suppression de certains types et fonctions obsolètes de la bibliothèque standard, notamment std::auto_ptr, std::random_shuffle et les anciens adaptateurs de fonction[3],[4]. Celles-ci ont été remplacées dans C++11 par des fonctionnalités améliorées telles que std::unique_ptr, std::shuffle, std::bind et lambdas.
Suppression de l'utilisation (anciennement obsolète) du mot clé register en tant que spécificateur de classe de stockage[5]. Ce mot-clé reste réservé.
Déduction des arguments des classes templates disponibles pour les constructeurs[22],[23]. Autorisant l'écriture std::pair(5.0,false) au lieu d'exiger la fourniture explicite des types des arguments du constructeur std::pair<double,bool>(5.0,false) ou une fonction de construction intermédiaire std::make_pair(5.0,false).
Variables inline permettant la définition de variables dans les fichiers d'en-tête sans enfreindre la règle de définition unique (les règles sont similaires à celle des fonctions inline).
__has_include permettant de vérifier la disponibilité d'un en-tête par les directives du préprocesseur[24].
La valeur de __cplusplus est changée en 201703L[25].
Les spécifications d'exception ont été intégrées à la signature des fonctions[26].
Les expressions lambda peuvent capturer *this par valeur[27].
Bibliothèque
La majorité de Library Fundamentals V1 TS, y compris [28] :