How can I detect if a type can be streamed to an std::ostream?
It’s apparently this overload of operator<< that’s stepping in your way and making the expression in traling return type valid: template< class CharT, class Traits, class T > basic_ostream< CharT, Traits >& operator<<( basic_ostream<CharT,Traits>&& os, const T& value ); See (3) on this reference page. It’s a simple forwarder (calling os << value) that was …