我创建了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测试