Подтвердить что ты не робот

В С++ 11, как я могу указать, что неявный параметр "this" "[[carry_dependency]]"?

В [dcl.attr.depend]/1 я прочитал:

Атрибут [...] carries_dependency [...] может быть применен к declarator-id для parameter-declaration в объявлении функции или лямбда, в этом случае он указывает, что инициализация параметра несет зависимость от (1.10) каждого преобразования lvalue-to-rvalue (4.1) этого объекта. Атрибут также может быть применен к declarator-id функции объявление, в этом случае оно указывает, что возвращаемое значение, если оно есть, несет зависимость от оценки выражения вызова функции.

То, что мне не хватает, - это способ применить атрибут к неявному параметру this.

В качестве примера рассмотрим эту свободную функцию:

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

и эквивалентная (но для атрибута) версия члена:

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

Ответ 1

Я не уверен, и у меня нет компилятора с поддержкой этого теста, но здесь есть возможность качания: я думаю, что грамматика [gram.decl] указывает, что вы должны ее поместить ( "атрибут -specifier_opt" ) в том же месте, которое вы поставили бы "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]];
};