2014-12-10 22 views
9

[util.smartptr.shared.io] in den C++ 11 Standard-Mandate ein operator<< für shared_ptr s:Warum gibt es keinen Operator << für std :: unique_ptr?

template<class E, class T, class Y> 
basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, shared_ptr<Y> const& p); 

aber wenn ich es bin fehlt, ich sehe nichts Vergleichbares in [unique.ptr ], und die Referenz auf en.cppreference.com stimmt überein. Gibt es einen Grund für den Unterschied ?

+5

Ich bin mir nicht sicher, ob diese Frage beantwortbar ist. Der Grund ist, dass niemand es (noch) in den Standard aufgenommen hat, aber wollten Sie das hören? –

+2

@KerrekSB Vermutlich möchte er nur bestätigen, dass es "make_unique" ähnlich ist. – Columbo

+2

@KerrekSB Das ist eigentlich eine Antwort. Ich glaube, die Frage ist "Gibt es dafür einen fundamentalen Grund oder ist es nur eine Auslassung?" – Angew

Antwort

7

Gibt es einen Grund für den Unterschied?

Nein, gibt es nicht. Genau wie bei make_unique ist dies eine "Aufsicht" und sollte in Zukunft hinzugefügt werden (wenn jemand die Mühe hat, einen Vorschlag zu senden).
In der Zwischenzeit können Sie die Ausgabe ptr.get() statt, oder - falls keine Angst vor undefinierten Verhalten:

#if __cplusplus <= 201600 // Some time in future 
namespace std { 
    template <class E, class T, class Y, class D> 
    basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, 
            unique_ptr<Y, D> const& p) { 
     return os << p.get(); 
    } 
} 
#endif 

Das nach [namespace.std] nicht definiert ist:

von

Das Verhalten Ein C++ - Programm ist nicht definiert, wenn Deklarationen oder Definitionen zu Namespace std [...] hinzugefügt werden, es sei denn, ist anders angegeben.

... und das oben Genannte ist in dieser Angelegenheit nicht ausdrücklich erlaubt. Dieses undefinierte Verhalten ist jedoch in Ordnung und kann ohne jegliche Auswirkungen aufgerufen werden.

+2

'+ 1', aber Sie möchten vielleicht erweitern, was die UB hier ist (und vielleicht wie schädlich/harmlos es in der Praxis sein könnte). – Angew

+0

@Angew Wait, war das nicht schon ein bazillion mal auf SO diskutiert? Ich dachte, das war allen gemeinsam ... – Columbo

+0

Obligatorisch unfunny Nasen dämonen Referenz. –

Verwandte Themen