2012-07-03 11 views
21

In [dcl.attr.depend]/1, ho letto:In C++ 11, come posso specificare che il parametro "questo" implicito "[[carries_dependency]]"?

L'attributo [...] carries_dependency [...] può essere applicato al declarator-id di un parameter-declaration in una dichiarazione di funzione o lambda, nel qual caso specifica che l'inizializzazione del parametro porta una dipendenza a (1.10) ogni conversione da valore a valore (4.1) di quell'oggetto. L'attributo può anche essere applicato allo declarator-id di una dichiarazione di funzione , nel qual caso specifica che il valore di ritorno, se presente, porta una dipendenza alla valutazione dell'espressione di chiamata di funzione.

Quello che mi manca è un modo per applicare l'attributo al parametro implicito this.

A titolo di esempio, si consideri questa funzione gratuitamente:

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

ed è equivalente (ma per l'attributo) Versione membro:

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

Sono abbastanza sicuro che può essere fatto, ma si dovrà cercare la sintassi nello standard. Posso provare ad indovinare che sarà qualcosa come '[[carries_dependency]] void fun (int);' o 'void fun (int) [[carries_dependency]];' nella dichiarazione. –

+0

@David Rodríguez - dribeas Se sto leggendo la grammatica, la prima applica l'attributo ai valori di ritorno della funzione (se ce ne sono) mentre quest'ultima non è consentita. –

+0

@ MarkB: 8.4.1p2 sembra indicare che gli attributi di funzione devono essere gli ultimi elementi nella dichiarazione di funzione. –

risposta

3

io non sono certo e non hanno un compilatore con supporto per questo test, ma ecco uno swing a una possibilità: penso che la grammatica [gram.decl] indica che dovresti essere in grado di metterlo ("attribute-specifier_opt") nello stesso punto che avresti messo " const "per indicare una costante questo puntatore (" cv-qualificatore-seq_opt "), che avrebbe senso:

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

E.g.

struct X{ 
    void f(int i) [[carries_dependency]]; 
}; 
+0

Piuttosto non sorprendente, confrontando i membri 'const',' = default' ecc – sehe

Problemi correlati