Current Version Looks like a problem in the enable_if_formatting_ostream structure. It has been added to this commit . And it looks like
template< typename StreamT, typename R > struct enable_if_formatting_ostream {}; template< typename CharT, typename TraitsT, typename AllocatorT, typename R > struct enable_if_formatting_ostream< basic_formatting_ostream< CharT, TraitsT, AllocatorT >, R > { typedef R type; };
And now operator << is
template< typename StreamT, typename T > inline typename boost::log::aux::enable_if_formatting_ostream< StreamT, StreamT& >::type operator<< (StreamT& strm, T const& value)
Before he was
template< typename CharT, typename TraitsT, typename AllocatorT, typename T > inline basic_formatting_ostream< CharT, TraitsT, AllocatorT >& operator<< (basic_formatting_ostream< CharT, TraitsT, AllocatorT >& strm, T const& value)
and since record_ostream derived from formatting_ostream , the compiler can find the overload, but now no, because SFINAE is used, and the struct will have a type typedef only when formatting_ostream used. And this can be a workaround for this case.
source share