2013-03-12 12 views
12
void operator"" test(const char* str, size_t sz ) 
{ 
    std::cout<<str<<" world"; 
} 

int main() 
{ 
    "hello"test; 
    return 0; 
} 

In GCC 4.7, questo genera "Attenzione: letterale suffissi operatore non preceduti da '_' sono riservati per il futuro la standardizzazione [abilitato per impostazione predefinita]"È possibile disabilitare l'avvertimento GCC in merito al carattere di sottolineatura mancante nel letterale definito dall'utente?

capisco perché viene generato questo avviso, ma GCC dice " abilitato di default ".

È possibile disattivare questo avviso senza disattivare tutti gli avvisi tramite il flag -w?

+4

Wow, non so che C++ 11 supporta l'overloading [operator ""] (http://ideone.com/ZDyCML). Dal modo in cui il g ++ presente almeno in ideone non avverte, ma il mio compilatore locale lo fa. Solo per le informazioni di altri (che non conoscono il contesto), cambiando 'test' a' _test' l'avviso scompare. – iammilind

+12

Perché vuoi? Ci sono tutte le possibilità che versioni successive del C++ includano simboli potenzialmente in conflitto. Questo è male*. Il problema di GCC è che non ti sta dando * un * errore nel modo in cui dovrebbe. –

+1

@Nicol, apprezza il tuo commento e questo avviso genera effettivamente un errore per me perché utilizzo -Werror. Abbiamo molti avvertimenti preziosi in GCC, ma lasciamo comunque che il programmatore li disabiliti esplicitamente. – cmeub

risposta

4

Dopo aver letto diversi commenti a questa domanda, ho rivisto lo standard C++ 11 (bozza non finale N3337).

Quando ho detto "ho capito perché questo avviso è stato generato" mi sono sbagliato. Supponevo che un trattino basso non fosse tecnicamente richiesto dallo standard, ma solo una raccomandazione (quindi l'avvertimento piuttosto che un errore).

Ma, come Nicol Bolas ha portato, lo standard usa la seguente lingua quando si parla di definiti dall'utente letterali: "identificatori suffisso letterali che non iniziano con un underscore sono riservati per il futuro la standardizzazione"

"Un programma contenente tale suffisso ud è mal formato, non è richiesta alcuna diagnostica."

Questo è simile alla lingua utilizzata per gli identificatori riservati e le "rappresentazioni alternative" come "e", "o", "non". Penso che sia abbastanza chiaro che questo non dovrebbe essere in realtà un avvertimento, ma un errore.

Questa potrebbe non essere la risposta diretta alla domanda "è possibile disabilitare", ma è una risposta sufficiente per me.

Nicol se si desidera inviare il commento come risposta cambierò il vostro per essere la risposta contrassegnata (penso che sia possibile).

Problemi correlati