2016-06-11 9 views
2

C++標準でテンプレート宣言の属性を設定できますか?たとえば:属性をテンプレートに適用できますか?

[[attr1]] template <typename T [[attr2]] > [[attr3]] 
class [[attr4]] C {}; 

私はattr4は、テンプレートのインスタンス(すなわち、それは例えば、T<int>T<char>の属性になります)の有効な属性と考えられるであろうと信じています。

ただし、コンパイラはattr1またはattr3のいずれかを無視しても問題ありませんか?

attr2も有効ですか?私はそうではないと思うが、私は確信していない。この問題は、インスタンス化で使用される特定の型に属性を「追加」する場合に発生しますが、IIRCの現在のテンプレートパラメータではすべての属性が無視されます。

attr1および/またはattr3に興味がありますが、テンプレートの特定の属性によって、指定されたタイプのセットで自動的にクラスのインスタンス化が強制的に行われるカスタムテスト用DSLです。

答えて

3

私はC++の文法に掘っ、ここで関連する部分です:

declaration: 
    block-declaration 
    template-declaration 

template-declaration: 
    template < template-parameter-list > declaration 

あなたは私を信じている場合declarationattribute-specifier-seqで始まっていないこと、[[attr1]][[attr3]]を禁止します。 [[attr2]]を禁止


template-parameter-list: 
    template-parameter 

template-parameter: 
    type-parameter 

type-parameter: 
    type-parameter-key ..._opt identifier_opt 

type-parameter-key: 
    class 
    typename 

identifier正規表現でuniversal-character-name他の実装定義文字と、[a-zA-Z_][a-zA-Z_0-9]*あります。 [[attr4]]

ことができます


declaration: 
    block-declaration 

simple-declaration: 
    decl-specifier-seq_opt init-declarator-list_opt ; 

decl-specifier-seq: 
    decl-specifier attribute-specifier-seq_opt 

decl-specifier: 
    type-specifier 

type-specifier: 
    class-specifier 

class-specifier: 
    class-head { member-specification_opt } 

class-head: 
    class-key attribute-specifier-seq_opt class-head-name class-virt-specifier_opt base-clause_opt 

関連する問題