unique_ptr
does not define operator<<
for stream outputSection: 20.3.1 [unique.ptr] Status: C++20 Submitter: Peter Dimov Opened: 2017-03-19 Last modified: 2021-02-25
Priority: 0
View all other issues in [unique.ptr].
View all issues with C++20 status.
Discussion:
shared_ptr
does define operator<<
, and unique_ptr
should too, for consistency and usability reasons.
[2017-07 Toronto Wed Issue Prioritization]
Priority 0; move to Ready
Proposed resolution:
This wording is relative to N4659.
Change 20.2.2 [memory.syn], header <memory>
synopsis, as indicated:
namespace std { […] // 20.3.1 [unique.ptr], class template unique_ptr […] template <class T, class D> bool operator>=(nullptr_t, const unique_ptr<T, D>& y); template<class E, class T, class Y, class D> basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, const unique_ptr<Y, D>& p); […] }
Change 20.3.1 [unique.ptr], class template unique_ptr
synopsis, as indicated:
namespace std { […] template <class T, class D> bool operator>=(nullptr_t, const unique_ptr<T, D>& y); template<class E, class T, class Y, class D> basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, const unique_ptr<Y, D>& p); }
Add a new subclause following subclause 20.3.1.6 [unique.ptr.special] as indicated:
23.11.1.??
unique_ptr
I/O [unique.ptr.io]template<class E, class T, class Y, class D> basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, const unique_ptr<Y, D>& p);-?- Effects: Equivalent to
-?- Returns:os << p.get();
os
. -?- Remarks: This function shall not participate in overload resolution unlessos << p.get()
is a valid expression.