// string_view standard header
// Copyright (c) Microsoft Corporation. All rights reserved.
#pragma once
#ifndef _STRING_VIEW_
#define _STRING_VIEW_
#ifndef RC_INVOKED
#include <xstring>
#include <xstring_insert.h>

#if !_HAS_CXX17
 #error string_view is only available with C++17.
#endif /* _HAS_CXX17 */

#pragma pack(push,_CRT_PACKING)
#pragma warning(push,_STL_WARNING_LEVEL)
#pragma warning(disable: _STL_DISABLED_WARNINGS)
#pragma push_macro("new")
#undef new

_STD_BEGIN
template<class _Elem,
	class _Traits> inline
	basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,
		const basic_string_view<_Elem, _Traits> _Str)
	{	// insert _Str into _Ostr
	return (_Insert_string(_Ostr, _Str.data(), _Str.size()));
	}


	// basic_string_view LITERALS
#ifdef __clang__
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wuser-defined-literals"
#endif /* __clang__ */

#pragma warning(push)
#pragma warning(disable: 4455)	// literal suffix identifiers that do not start with an underscore are reserved

inline namespace literals {
inline namespace string_view_literals {
constexpr string_view operator "" sv(const char *_Str, size_t _Len) _NOEXCEPT
	{	// construct string_view from [_Str, _Str + _Len)
	return (string_view(_Str, _Len));
	}

constexpr wstring_view operator "" sv(const wchar_t *_Str, size_t _Len) _NOEXCEPT
	{	// construct wstring_view from [_Str, _Str + _Len)
	return (wstring_view(_Str, _Len));
	}

constexpr u16string_view operator "" sv(const char16_t *_Str, size_t _Len) _NOEXCEPT
	{	// construct u16string_view from [_Str, _Str + _Len)
	return (u16string_view(_Str, _Len));
	}

constexpr u32string_view operator "" sv(const char32_t *_Str, size_t _Len) _NOEXCEPT
	{	// construct u32string_view from [_Str, _Str + _Len)
	return (u32string_view(_Str, _Len));
	}
}	// inline namespace string_view_literals
}	// inline namespace literals

#pragma warning(pop)

#ifdef __clang__
 #pragma clang diagnostic pop
#endif /* __clang__ */
_STD_END

#pragma pop_macro("new")
#pragma warning(pop)
#pragma pack(pop)
#endif /* RC_INVOKED */
#endif /* _STRING_VIEW_ */
