Cxx-prettyprint (für Standardcontainer) definiert seine Ausgabeoperatoren im Namespace std. Handelt es sich um eine Standardverletzung?

Ich habe erfolgreich verwendetcxx-prettyprint: Ein C ++ Container Pretty-Printer Containerwerte zu protokollieren. (Siehe auchPretty-Print-C ++ - STL-Container) Es funktioniert wie ein Zauber auf unserem VS-2005 (VC8) Compiler. (mit dem prettyprint98.hpp-Header)

Als ich die Interoperabilität mit Boost.Format studierte, stellte ich zu meiner Überraschung fest, dass es sofort funktioniert, wennAndere Fragen deuten darauf hin, dass dies nicht der Fall sein sollte da ADL für einen vom Benutzer angegebenen Ausgabeoperator fehlschlagen sollte.

Ein Blick in diecxx-pp-Header Ich fand, dass es einfach funktioniert, weil die Bibliothek es tutDefinieren der AusgabeoperatorenInnerhalb dasstd Namespace:

namespace std
{
    // Prints a print_container_helper to the specified stream.

    template<typename T, typename TChar, typename TCharTraits, typename TDelimiters>
    inline basic_ostream<TChar, TCharTraits> & operator<<(basic_ostream<TChar, TCharTraits> & stream,
                                                          const ::pretty_print::print_container_helper<T, TChar, TCharTraits, TDelimiters> & helper)
    {
        helper(stream);
        return stream;
    }
....

Dem etwas hinzufügenstd Namespace istformell UB:

[C++11: 17.6.4.2.1/1]: Das Verhalten eines C ++ - Programms ist undefiniert, wenn es dem Namespace Deklarationen oder Definitionen hinzufügtstd oder zu einem Namespace innerhalb des Namespacestd Falls nicht anders angegeben. Ein Programm kann dem Namespace std nur dann eine Vorlagenspezialisierung für eine Standardbibliotheksvorlage hinzufügen, wenn die Deklaration von einem benutzerdefinierten Typ abhängt und die Spezialisierung den Standardbibliotheksanforderungen für die ursprüngliche Vorlage entspricht und nicht ausdrücklich untersagt ist.

Also, ist das in cxx-pp formal UB, oder ist es eine Template-Spezialisierung (es scheint mir keine zu sein)?

Kommentare zu den praktischen Auswirkungen, wenn UB, wären sehr willkommen.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage