21

[ dcl.attr.depend ]/1で、次のように読みました。

属性[...] [...] は、関数宣言またはラムダの acarries_dependencyに適用できます。この場合、パラメーターの初期化が (1.10) 各左辺値から右辺値への依存関係を運ぶことを指定します。そのオブジェクトの変換 (4.1)。この属性は、関数宣言の に適用することもできます。この場合、戻り値があれば、それが関数呼び出し式の評価に依存することを指定します。declarator-idparameter-declarationdeclarator-id

私が見逃しているのは、属性を暗黙的thisなパラメーターに適用する方法です。

例として、次の free 関数を考えてみましょう。

void fun(int i, Foo * [[carries_dependency]] f);

そしてそれは同等です(ただし、属性については)メンバーバージョン:

void Foo::fun(int i); // can't add [[carries_dependency]] here?
4

1 に答える 1

3

私は確信が持てず、これをテストするためのサポートを備えたコンパイラーを持っていませんが、ここに可能性のあるスイングがあります: 文法 [gram.decl] は、あなたがそれを置くことができるはずであることを示していると思います) 同じ場所に "const" を配置して、このポインター ("cv-qualifier-seq_opt") の定数を示します。これは意味があります。

parameters-and-qualifiers:
    ( parameter-declaration-clause ) attribute-specifier_opt cv-qualifier-seq_opt
        ref-qualifier_opt exception-specification_opt

例えば

struct X{
    void f(int i) [[carries_dependency]];
};
于 2012-07-10T15:32:46.527 に答える