En C++ 11, ¿cómo especifico que el parámetro "esto" implícito "[[carry_dependency]]"?
c++11 member-functions (1)
En [dcl.attr.depend] / 1 , leí:
El atributo
carries_dependency
[...] se puede aplicar aldeclarator-id
de unaparameter-declaration
en una declaración de función o lambda, en cuyo caso se especifica que la inicialización del parámetro conlleva una dependencia de (1.10 ) cada conversión de lvalue a rvalue (4.1) de ese objeto. El atributo también se puede aplicar aldeclarator-id
de una declaración de función, en cuyo caso especifica que el valor de retorno, si existe, conlleva una dependencia de la evaluación de la expresión de llamada de función.
Lo que me falta es una forma de aplicar el atributo a this
parámetro implícito.
A modo de ejemplo, considere esta función gratuita:
void fun(int i, Foo * [[carries_dependency]] f);
y es equivalente (pero para el atributo) versión miembro:
void Foo::fun(int i); // can''t add [[carries_dependency]] here?
No estoy seguro y no tengo un compilador con soporte para probar esto, pero aquí hay una posibilidad: creo que la gramática [gram.decl] indica que debería poder ponerlo ("attribute-specifier_opt" ) en el mismo lugar en el que pondría "const" para indicar una constante de este puntero ("cv-qualifier-seq_opt"), lo que tendría sentido:
parameters-and-qualifiers:
( parameter-declaration-clause ) attribute-specifier_opt cv-qualifier-seq_opt
ref-qualifier_opt exception-specification_opt
P.ej
struct X{
void f(int i) [[carries_dependency]];
};