C++03 では、多くのコンパイラの独自拡張で属性を指定する構文があります。
たとえば、 GCC では __attribute__ 、 Visual C++ では __declspec のようなものがあります。
C++0x では、属性を指定するための構文が一般化されます。
属性を指定するためには角カッコ 2 つで囲み、その中に属性名を指定します。
[[ arrtibute-list ]]
以下は、標準で提供される属性です
【align】
align 属性は、アライメントの指定に使用します。
int value [[ align(4) ]]; int value [[ align(int) ]]; // int value [[ alignof(int) ]]; と同じ意味
align(型) もしくは align(式)
【noreturn】
noreturn 属性は、関数が返らないことを明示します。
void f [[ noreturn ]] () { throw "error"; // OK } // i <= 0で呼ばれたらill-formed void g [[ noreturn ]] (int i) { if (i > 0) throw "positive"; }
noreturn 属性が付加された関数で関数が返った場合、その振る舞いは未定義です。
【final】
final 属性は、仮想関数のオーバーライド禁止を明示するための属性です。
final 属性が付加された関数をオーバーライドした場合、ill-formedです。
struct B { virtual void f [[ final ]] (); }; struct D : B { void f(); // ill-formed };
final 属性がクラス定義に指定された場合、継承したメンバ関数を含む、すべての仮想関数に final 属性を指定することと等価になります。
N2761 Towards support for attributes in C++ (Revision 6)