C++17 中命名空间的属性"deprecated"

Attribute "deprecated" to namespace in C++17

本文关键字:deprecated 属性 命名空间 C++17      更新时间:2023-10-16

我创建了C++程序来试验deprecated关键字C++17。

它在clang(3.8.0) 中工作正常,但是g++(5.4.0)给出了一个错误。

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;

为什么?

#include <iostream>
using namespace std;
namespace foo  
{ 
int var; 
}
namespace [[ deprecated ]] bar
{ 
int var; 
}
int main() 
{
bar::var = 10;
return 0;
}

线索在错误消息中:"令牌之前的预期标识符["。标识符bar的,并且必须出现在[之前。所以:

namespace bar [[deprecated]]
{ } 

通过GCC6.3测试