2012-06-04 8 views
5

Clang 3.1 afferma di supportare letterali definiti dall'utente. Posso definire questo:Clang 3.1 e letterali definiti dall'utente

int operator"" _tryit(long double n) { return int(n); } 

ma quando provo ad usarlo ottengo un errore:

int m = 5_tryit; 

Invalid suffix '_tryit' on integer constant

+4

Che ne dite di 'int m = 5.0_tryit;'? – ildjarn

+2

Mi scuso se sto insultando la tua intelligenza, ma ... sembra l'errore che ottengo quando compilo in modalità C++ 03 anziché in C++ 11, o quando uso clang-3.0 invece di 3.1, non come qualsiasi degli errori che ottengo quando uso male un suffisso nella modalità C++ 11 di 3.1. Sei sicuro di usare la versione giusta e la bandiera -std? – abarnert

risposta

7

5 non può essere implicitamente convertito in un long double nel tuo caso. È necessario cambiare per 5.0 per renderlo un lungo doppio o esplicitamente richiamare la funzione da soli per la conversione implicita di lavorare:

int m = 5.0_tryit; 

O

int n = operator"" _tryit(5); 

(testato sia con clang version 3.1 (trunk) (llvm/trunk 155821))

This SO question ha una buona spiegazione delle regole.

(Inoltre, come menzionato da Abarnert, assicurati di passare il flag -std=c++11 al compilatore durante la compilazione).

+0

Ma questo funziona: cout << operator "" _tryit (5) << endl; – John

+0

E "5.0_tryit" no. – John

+0

@John: ho appena testato 'int m = 5.0_tryit;' con clang 3.1 e ha funzionato per me. –

Problemi correlati