// MIT License
//
// Copyright (c) 2023 igozdev
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#pragma once
#define CHARIMPL_ASCII_EXPR \
'\a' == static_cast<char>(0x07) && \
'\b' == static_cast<char>(0x08) && \
'\t' == static_cast<char>(0x09) && \
'\n' == static_cast<char>(0x0A) && \
'\v' == static_cast<char>(0x0B) && \
'\f' == static_cast<char>(0x0C) && \
'\r' == static_cast<char>(0x0D) && \
' ' == static_cast<char>(0x20) && \
'!' == static_cast<char>(0x21) && \
'\"' == static_cast<char>(0x22) && \
'#' == static_cast<char>(0x23) && \
'$' == static_cast<char>(0x24) && \
'%' == static_cast<char>(0x25) && \
'&' == static_cast<char>(0x26) && \
'\'' == static_cast<char>(0x27) && \
'(' == static_cast<char>(0x28) && \
')' == static_cast<char>(0x29) && \
'*' == static_cast<char>(0x2A) && \
'+' == static_cast<char>(0x2B) && \
',' == static_cast<char>(0x2C) && \
'-' == static_cast<char>(0x2D) && \
'.' == static_cast<char>(0x2E) && \
'/' == static_cast<char>(0x2F) && \
'0' == static_cast<char>(0x30) && \
'1' == static_cast<char>(0x31) && \
'2' == static_cast<char>(0x32) && \
'3' == static_cast<char>(0x33) && \
'4' == static_cast<char>(0x34) && \
'5' == static_cast<char>(0x35) && \
'6' == static_cast<char>(0x36) && \
'7' == static_cast<char>(0x37) && \
'8' == static_cast<char>(0x38) && \
'9' == static_cast<char>(0x39) && \
':' == static_cast<char>(0x3A) && \
';' == static_cast<char>(0x3B) && \
'<' == static_cast<char>(0x3C) && \
'=' == static_cast<char>(0x3D) && \
'>' == static_cast<char>(0x3E) && \
'?' == static_cast<char>(0x3F) && \
'@' == static_cast<char>(0x40) && \
'A' == static_cast<char>(0x41) && \
'B' == static_cast<char>(0x42) && \
'C' == static_cast<char>(0x43) && \
'D' == static_cast<char>(0x44) && \
'E' == static_cast<char>(0x45) && \
'F' == static_cast<char>(0x46) && \
'G' == static_cast<char>(0x47) && \
'H' == static_cast<char>(0x48) && \
'I' == static_cast<char>(0x49) && \
'J' == static_cast<char>(0x4A) && \
'K' == static_cast<char>(0x4B) && \
'L' == static_cast<char>(0x4C) && \
'M' == static_cast<char>(0x4D) && \
'N' == static_cast<char>(0x4E) && \
'O' == static_cast<char>(0x4F) && \
'P' == static_cast<char>(0x50) && \
'Q' == static_cast<char>(0x51) && \
'R' == static_cast<char>(0x52) && \
'S' == static_cast<char>(0x53) && \
'T' == static_cast<char>(0x54) && \
'U' == static_cast<char>(0x55) && \
'V' == static_cast<char>(0x56) && \
'W' == static_cast<char>(0x57) && \
'X' == static_cast<char>(0x58) && \
'Y' == static_cast<char>(0x59) && \
'Z' == static_cast<char>(0x5A) && \
'[' == static_cast<char>(0x5B) && \
'\\' == static_cast<char>(0x5C) && \
']' == static_cast<char>(0x5D) && \
'^' == static_cast<char>(0x5E) && \
'_' == static_cast<char>(0x5F) && \
'`' == static_cast<char>(0x60) && \
'a' == static_cast<char>(0x61) && \
'b' == static_cast<char>(0x62) && \
'c' == static_cast<char>(0x63) && \
'd' == static_cast<char>(0x64) && \
'e' == static_cast<char>(0x65) && \
'f' == static_cast<char>(0x66) && \
'g' == static_cast<char>(0x67) && \
'h' == static_cast<char>(0x68) && \
'i' == static_cast<char>(0x69) && \
'j' == static_cast<char>(0x6A) && \
'k' == static_cast<char>(0x6B) && \
'l' == static_cast<char>(0x6C) && \
'm' == static_cast<char>(0x6D) && \
'n' == static_cast<char>(0x6E) && \
'o' == static_cast<char>(0x6F) && \
'p' == static_cast<char>(0x70) && \
'q' == static_cast<char>(0x71) && \
'r' == static_cast<char>(0x72) && \
's' == static_cast<char>(0x73) && \
't' == static_cast<char>(0x74) && \
'u' == static_cast<char>(0x75) && \
'v' == static_cast<char>(0x76) && \
'w' == static_cast<char>(0x77) && \
'x' == static_cast<char>(0x78) && \
'y' == static_cast<char>(0x79) && \
'z' == static_cast<char>(0x7A) && \
'{' == static_cast<char>(0x7B) && \
'|' == static_cast<char>(0x7C) && \
'}' == static_cast<char>(0x7D) && \
'~' == static_cast<char>(0x7E)
namespace charimpl
{
#if defined(__cpp_consteval)
consteval
#elif defined(__cpp_constexpr)
constexpr
#else
inline
#endif
bool is_ascii()
#if defined(__cpp_noexcept_function_type)
noexcept
#endif
{
return CHARIMPL_ASCII_EXPR;
}
}