C++17, anciennement connu sous le nom de C++1z, est une norme pour le langage de programmation C++. 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. Cette version de C++ a non seulement ajouté de nouvelles fonctionnalités, mais en a également supprimé quelques-unes. Suppression des trigrammes. Suppression de certains types et fonctions obsolètes de la bibliothèque standard, notamment , et les anciens adaptateurs de fonction. Celles-ci ont été remplacées dans C++11 par des fonctionnalités améliorées telles que , , et lambdas. Suppression de l'utilisation (anciennement obsolète) du mot clé en tant que spécificateur de classe de stockage. Ce mot-clé reste réservé. Le message de est facultatif. Utilisation possible de (comme alternative à ) pour les paramètres de . Nouvelles règles de déduction des braced-init-list avec . Définitions d'espace de noms imbriquées : au lieu de . Utilisation d'attributs sur les espaces de noms et les énumérateurs. Nouveaux attributs standards , et . Caractères littéraux UTF-8 () (les chaines littérales UTF-8 existent depuis C++11). Littéraux hexadécimaux à virgule flottante. Utilisation de pour les non-type template parameter. Évaluation constante des arguments des non-type template parameter. fold expression pour les variadic template. statique évalué à la compilation : . Déclarations structured binding : . Initialiseurs dans les instructions et . L'initialisation par copie et l'initialisation directe d'objets de type partir de de type (en ignorant les qualificatifs cv) n'entraîne l'appel d'aucun constructeur de copie ni de déplacement à partir de l'expression (élision de copie). Déduction des arguments des classes templates disponibles pour les constructeurs. Autorisant l'écriture au lieu d'exiger la fourniture explicite des types des arguments du constructeur ou une fonction de construction intermédiaire .