0
J'ai créé le programme C++ pour expérimenter le mot-clé deprecated
de C++ 17.Attribut "déprécié" à l'espace de noms en C++ 17
Il fonctionne très bien dans clang (3.8.0), mais, g ++ (5.4.0) donne une erreur.
source_file.cpp:9:11: error: expected identifier before ‘[’ token
namespace [[ deprecated ]] bar
^
source_file.cpp:9:28: error: ‘bar’ does not name a type
namespace [[ deprecated ]] bar
^
source_file.cpp: In function ‘int main()’:
source_file.cpp:16:5: error: ‘bar’ has not been declared
bar::var = 10;
Pourquoi?
#include <iostream>
using namespace std;
namespace foo
{
int var;
}
namespace [[ deprecated ]] bar
{
int var;
}
int main()
{
bar::var = 10;
return 0;
}
Quelle est l'erreur? Êtes-vous sûr que 5.4 le supporte déjà? –
Selon [this] (https://gcc.gnu.org/projects/cxx-status.html), il est supporté depuis gcc 4.9. Et il est autorisé sur les espaces de noms, à partir de [dcl.attr.deprecated]: "L'attribut peut être appliqué à la déclaration d'une classe, un typedef-name, une variable, un membre de données non statique, une fonction, un espace de nom, une énumération, un énumérateur ou une spécialisation de modèle. " – VTT
Vous devez vous lever à g ++ 6.1, et à partir de la version 8.0, c'est toujours un avertissement. – Arpegius