// Standard C++ <string> header
// Copyright (C) Florian Negele

// This file is part of the Eigen Compiler Suite.

// The ECS is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// The ECS is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of the GNU General Public License version 3,
// the copyright holder grants you additional permissions to use
// this file as described in the ECS Runtime Support Exception.

// You should have received a copy of the GNU General Public License
// and a copy of the ECS Runtime Support Exception along with
// the ECS.  If not, see <https://www.gnu.org/licenses/>.

#ifndef ECS_CPP_STRING_HEADER_INCLUDED
#define ECS_CPP_STRING_HEADER_INCLUDED

#include "initializer_list"

#define __cpp_lib_allocator_traits_is_always_equal 201411L
#define __cpp_lib_char8_t 201907L
#define __cpp_lib_constexpr_string 201907L
#define __cpp_lib_containers_ranges 202202L
#define __cpp_lib_erase_if 202002L
#define __cpp_lib_nonmember_container_access 201411L
#define __cpp_lib_starts_ends_with 201711L
#define __cpp_lib_string_contains 202011L
#define __cpp_lib_string_resize_and_overwrite 202110L
#define __cpp_lib_string_udls 201304L
#define __cpp_lib_string_view 201803L

namespace std
{
	template <typename> struct allocator;
	template <typename> struct char_traits;

	template <typename C, typename = char_traits<C>, typename = allocator<C>> class basic_string;

	template <> struct char_traits<char>;
	template <> struct char_traits<char16_t>;
	template <> struct char_traits<char32_t>;
	template <> struct char_traits<wchar_t>;

	using string = basic_string<char>;
	using u16string = basic_string<char16_t>;
	using u32string = basic_string<char32_t>;
	using wstring = basic_string<wchar_t>;
}

#endif // ECS_CPP_STRING_HEADER_INCLUDED
