2013-03-12 6 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 erzeugt diese „Warnung: Literaloperator Suffixe von nicht voraus‚_‘sind für die zukünftige Standardisierung vorbehalten [standardmäßig aktiviert]“Ist es möglich, die GCC-Warnung über fehlende Unterstriche im benutzerdefinierten Literal zu deaktivieren?

Ich verstehe, warum diese Warnung generiert wird, aber GCC sagt " standardmäßig aktiviert ".

Ist es möglich, diese Warnung zu deaktivieren, ohne alle Warnungen über die Option -w zu deaktivieren?

+4

Wow, ich weiß nicht, dass C++ 11 das Überladen von [operator ""] unterstützt (http://ideone.com/ZDyCML). Übrigens warnt das in ideone vorhandene g ++ zumindest nicht, aber mein lokaler Compiler tut es. Nur für die Informationen anderer (die den Kontext nicht kennen), ändert sich die Warnung, indem "test" in "_test" geändert wird. – iammilind

+12

Warum willst du? Es besteht die Möglichkeit, dass spätere C++ - Versionen möglicherweise widersprüchliche Symbole enthalten. Das ist schlecht*. Das Problem von GCC ist, dass es Ihnen keinen * Fehler * gibt, wie es sein sollte. –

+1

@ Nicol, schätze deinen Kommentar und diese Warnung führt tatsächlich zu einem Fehler, weil ich -Werror benutze. Wir haben viele wertvolle Warnungen in GCC, aber wir lassen sie trotzdem explizit vom Programmierer deaktivieren. – cmeub

Antwort

4

Nachdem ich einige Kommentare zu dieser Frage gelesen hatte, überprüfte ich den C++ 11 Standard (nicht endgültiger Entwurf N3337).

Als ich sagte "Ich verstehe, warum diese Warnung generiert wird" habe ich mich geirrt. Ich nahm an, dass ein Unterstrich vom Standard nicht technisch gefordert wurde, sondern nur eine Empfehlung (daher eher die Warnung als ein Fehler).

Aber wie Nicol Bolas hat gebracht, die Standard folgende Sprache verwendet, wenn es um benutzerdefinierte Literale sprechen: „Wörtliche Suffix Kennungen, die für die zukünftige Standardisierung reserviert nicht mit einem Unterstrich beginnen werden“

"Ein Programm mit einem solchen ud-Suffix ist fehlerhaft, keine Diagnose erforderlich."

Dies ist ähnlich der Sprache für reservierte Bezeichner und die "alternativen Darstellungen" wie "und", "oder", "nicht". Ich denke, das macht deutlich, dass dies eigentlich gar keine Warnung, sondern ein Fehler sein sollte.

Dies ist vielleicht nicht die direkte Antwort auf die Frage "Ist es möglich zu deaktivieren", aber es ist die Antwort genug für mich.

Nicol, wenn Sie Ihren Kommentar als die Antwort einreichen möchten, werde ich ändern, um die markierte Antwort zu sein (ich denke, das ist möglich).

Verwandte Themen