0
Ich habe C++ - Programm zum Experimentieren von deprecated
Schlüsselwort von C++ 17 erstellt.Attribut "veraltet" zu Namespace in C++ 17
Es funktioniert gut in Klirren (3.8.0), aber g ++ (5.4.0) gibt einen Fehler.
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;
Warum?
#include <iostream>
using namespace std;
namespace foo
{
int var;
}
namespace [[ deprecated ]] bar
{
int var;
}
int main()
{
bar::var = 10;
return 0;
}
Was ist der Fehler? Bist du sicher, dass 5.4 es bereits unterstützt? –
Laut [this] (https://gcc.gnu.org/projects/cxx-status.html) wird es seit gcc 4.9 unterstützt. Und es ist für Namespaces erlaubt, von [dcl.attr.deprecated]: "Das Attribut kann auf die Deklaration einer Klasse, einen typedef-name, eine Variable, einen nicht statischen Datenmember, eine Funktion, einen Namespace, eine Enumeration, ein Enumerator oder eine Template-Spezialisierung. " – VTT
Sie müssen auf g ++ 6.1 aufsteigen, und ab 8.0 wird immer noch gewarnt. – Arpegius