Skip to content

Latest commit

 

History

History
29 lines (17 loc) · 1.26 KB

032-cpp17-core-using-attribute-namespace.md

File metadata and controls

29 lines (17 loc) · 1.26 KB

using属性名前空間

C++17では、属性名前空間にusingディレクティブのような記述ができるようになった。

// [[extention::foo, extention::bar]]と同じ
[[ using extention : foo, bar ]] int x ;

属性トークンには、属性名前空間をつけることができる。これにより、独自拡張の属性トークンの名前の衝突を避けることができる。

例えば、あるC++コンパイラーには独自拡張としてfoo, barという属性トークンがあり、別のC++コンパイラーも同じく独自拡張としてfoo, barという属性トークンを持っているが、それぞれ意味が違っている場合、コードの意味も違ってしまう。

[[ foo, bar ]] int x ;

このため、C++には属性名前空間という文法が用意されている。注意深いC++コンパイラーは独自拡張の属性トークンには属性名前空間を設定していることだろう。

[[ extention::foo, extention::bar ]] int x ;

問題は、これをいちいち記述するのは面倒だということだ。

C++17では、using属性名前空間という機能により、usingディレクティブのような名前空間の省略が可能になった。