21

[dcl.attr.depend]/1中,我读到:

属性[...] carries_dependency[...] 可以应用于函数声明或 lambda 中declarator-idparameter-declaration该对象的转换(4.1)。该属性也可以应用于declarator-id函数声明,在这种情况下,它指定返回值(如果有)携带对函数调用表达式求值的依赖。

我缺少的是一种将属性应用于隐式this参数的方法。

例如,考虑这个自由函数:

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] 表明你应该能够把它(“attribute-specifier_opt” ) 在同一个地方,你可以用 "const" 来表示一个常量 this 指针 ("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 回答