En [dcl.attr.depend]/1, leo:En C++ 11, ¿cómo especifico que el "implícito" parámetro "[[carries_dependency]]"?
El atributo [...]
carries_dependency
[...] se puede aplicar a ladeclarator-id
de unparameter-declaration
en una declaración de la función o lambda, en cuyo caso especifica que la inicialización del parámetro conlleva una dependencia a (1.10) cada conversión de valor l a valor r (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 lo hay, conlleva una dependencia a la evaluación de la expresión de llamada de función.
Lo que me falta es una forma de aplicar el atributo al parámetro this
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 de:
void Foo::fun(int i); // can't add [[carries_dependency]] here?
Estoy seguro de que se puede hacer, pero tendrá que buscar la sintaxis en el estándar. Puedo intentar adivinar que será algo así como '[[carries_dependency]] void fun (int);' o 'void fun (int) [[carries_dependency]];' en la declaración. –
@David Rodríguez - dribeas Si estoy leyendo la gramática correcta, la primera aplica el atributo a los valores de retorno de la función (si corresponde) mientras que la segunda no está permitida. –
@MarkB: 8.4.1p2 parece indicar que los atributos de la función deben ser los últimos elementos en la declaración de la función. –