// This file is under GNU General Public License 3.0 // see LICENSE.txt #ifndef PEP_DATATYPES_STRING_VIEW_HH #define PEP_DATATYPES_STRING_VIEW_HH #if (__cplusplus >= 201606) // std::string_view is C++17. # include namespace pEp { template using basic_string_view = std::basic_string_view; typedef std::string_view string_view; typedef std::u16string_view u16string_view; typedef std::u32string_view u32string_view; } #else // in C++11 / C++14 use boost::string_view instead. # include namespace pEp { template using basic_string_view = boost::basic_string_view; typedef boost::string_view string_view; typedef boost::u16string_view u16string_view; typedef boost::u32string_view u32string_view; // boost::string_view does not provide these operations, neither by boost nor by the stdlib. :-( template inline std::basic_string& operator+=(std::basic_string& s, const basic_string_view v) { s.append(v.data(), v.size()); return s; } template inline std::basic_string operator+(std::basic_string s, const basic_string_view v) { return s += v; } // using ::std::operator+=; // using ::boost::operator+=; } // end of namespace pEp #endif // C++17 switch namespace pEp { constexpr string_view operator""_sv(const char* s, size_t sz) noexcept { return string_view(s,sz); } } #endif // PEP_DATATYPES_STRING_VIEW_HH