boost/parser/detail/text/utf.hpp
// Copyright (C) 2020 T. Zachary Laine // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_PARSER_DETAIL_TEXT_UTF_HPP #define BOOST_PARSER_DETAIL_TEXT_UTF_HPP #include <boost/parser/detail/text/config.hpp> #include <cstdint> #include <type_traits> #include <cstdint> namespace boost::parser::detail { namespace text { /** The Unicode Transformation Formats. */ enum class format { none = 0, utf8 = 1, utf16 = 2, utf32 = 4 }; namespace detail { template<typename T> constexpr format format_of() { if constexpr ( std::is_same_v<T, char> #if defined(__cpp_char8_t) || std::is_same_v<T, char8_t> #endif ) { return format::utf8; } else if ( std::is_same_v<T, char16_t> #ifdef _MSC_VER || std::is_same_v<T, wchar_t> #endif ) { return format::utf16; } else { return format::utf32; } } } }} #endif