--- include/cpprest/astreambuf.h.orig 2023-12-05 04:23:31 UTC +++ include/cpprest/astreambuf.h @@ -15,6 +15,7 @@ #include "cpprest/asyncrt_utils.h" #include "cpprest/details/basic_types.h" +#include "cpprest/details/char_traits.h" #include "pplx/pplxtasks.h" #include #include @@ -56,55 +57,28 @@ namespace streams /// /// The data type of the basic element of the stream. /// +namespace detail +{ template -struct char_traits : std::char_traits<_CharType> +struct char_traits : utility::CanUseStdCharTraits<_CharType>::TraitsType { /// /// Some synchronous functions will return this value if the operation /// requires an asynchronous call in a given situation. /// /// An int_type value which implies that an asynchronous call is required. - static typename std::char_traits<_CharType>::int_type requires_async() + static typename utility::CanUseStdCharTraits<_CharType>::TraitsType::int_type requires_async() { - return std::char_traits<_CharType>::eof() - 1; + return utility::CanUseStdCharTraits<_CharType>::TraitsType::eof() - 1; } }; +} +template struct char_traits : detail::char_traits<_CharType> { +}; #if !defined(_WIN32) -template<> -struct char_traits : private std::char_traits -{ -public: - typedef unsigned char char_type; - - using std::char_traits::eof; - using std::char_traits::int_type; - using std::char_traits::off_type; - using std::char_traits::pos_type; - - static size_t length(const unsigned char* str) - { - return std::char_traits::length(reinterpret_cast(str)); - } - - static void assign(unsigned char& left, const unsigned char& right) { left = right; } - static unsigned char* assign(unsigned char* left, size_t n, unsigned char value) - { - return reinterpret_cast( - std::char_traits::assign(reinterpret_cast(left), n, static_cast(value))); - } - - static unsigned char* copy(unsigned char* left, const unsigned char* right, size_t n) - { - return reinterpret_cast( - std::char_traits::copy(reinterpret_cast(left), reinterpret_cast(right), n)); - } - - static unsigned char* move(unsigned char* left, const unsigned char* right, size_t n) - { - return reinterpret_cast( - std::char_traits::move(reinterpret_cast(left), reinterpret_cast(right), n)); - } - +template <> struct char_traits : detail::char_traits { + typedef typename std::char_traits::int_type int_type; + static int_type eof() { return std::char_traits::eof(); } static int_type requires_async() { return eof() - 1; } }; #endif