- More Documentation

- Vulkan Configuration Implementations
 - Fixed build errors on GCC and Clang
This commit is contained in:
2026-07-18 23:48:00 -04:00
parent ed381c4178
commit cf909624df
164 changed files with 19857 additions and 5872 deletions

View File

@@ -102,80 +102,80 @@ inline void float_h()
out << "" << '\n';
out << R"(/// \brief Does \f$float\f$ have an infinity?)" << '\n';
out << R"(/// \brief Does \emph{float} have an infinity?)" << '\n';
out << "#define FLT_HAS_INFINITY " << std::dec << std::numeric_limits<float>::has_infinity << '\n';
out << R"(/// \brief Does \f$float\f$ have a quiet NaN?)" << '\n';
out << R"(/// \brief Does \emph{float} have a quiet NaN?)" << '\n';
out << "#define FLT_HAS_QUIET_NAN " << std::dec << std::numeric_limits<float>::has_quiet_NaN << '\n';
out << R"(/// \brief Does \f$float\f$ have a signaling NaN?)" << '\n';
out << R"(/// \brief Does \emph{float} have a signaling NaN?)" << '\n';
out << "#define FLT_HAS_SIGNALING_NAN " << std::dec << std::numeric_limits<float>::has_signaling_NaN << '\n';
out << R"(/// \brief Does \f$float\f$ use denormalization?)" << '\n';
out << R"(/// \brief Does \emph{float} use denormalization?)" << '\n';
out << "#define FLT_HAS_DENORM " << std::dec << std::numeric_limits<float>::has_denorm << '\n';
out << R"(/// \brief Does \f$float\f$ have loss with denormalization?)" << '\n';
out << R"(/// \brief Does \emph{float} have loss with denormalization?)" << '\n';
out << "#define FLT_HAS_DENORM_LOSS " << std::dec << std::numeric_limits<float>::has_denorm_loss << '\n';
out << R"(/// \brief What rounding style does \f$float\f$ use?)" << '\n';
out << R"(/// \brief What rounding style does \emph{float} use?)" << '\n';
out << "#define FLT_ROUNDS " << std::dec << std::numeric_limits<float>::round_style << '\n';
out << R"(/// \brief Does \f$float\f$ use the IEEE floating point specification?)" << '\n';
out << R"(/// \brief Does \emph{float} use the IEEE floating point specification?)" << '\n';
out << "#define FLT_IS_IEC559 " << std::dec << std::numeric_limits<float>::is_iec559 << '\n';
out << R"(/// \brief The number of mantissa bits in \f$float\f$.)" << '\n';
out << R"(/// \brief The number of mantissa bits in \emph{float}.)" << '\n';
out << "#define FLT_MANT_DIG " << std::dec << std::numeric_limits<float>::digits << '\n';
out << R"(/// \brief The number of decimal digits guaranteed to be preserved in a \f$float\f$ &rarr; \f$text\f$ &rarr; \f$float\f$.)" << '\n';
out << R"(/// \brief The number of decimal digits guaranteed to be preserved in a \emph{float} &rarr; \emph{text} &rarr; \emph{float}.)" << '\n';
out << "#define FLT_DIG " << std::dec << std::numeric_limits<float>::digits10 << '\n';
out << R"(/// \brief The decimal precision required to serialize and deserialize a \f$float\f$.)" << '\n';
out << R"(/// \brief The decimal precision required to serialize and deserialize a \emph{float}.)" << '\n';
out << "#define FLT_DECIMAL_DIG " << std::dec << std::numeric_limits<float>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$float\f$.)" << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{float}.)" << '\n';
out << "#define FLT_RADIX " << std::dec << std::numeric_limits<float>::radix << '\n';
out << R"(/// \brief The minimum negative integer such that \f${FLT_RADIX}^{FLT_MIN_EXP}\f$ results in a normalized \f$float\f$.)" << '\n';
out << R"(/// \brief The minimum negative integer such that \math{\textbf{FLT_RADIX}^\textbf{FLT_MIN_EXP}} results in a normalized \emph{float}.)" << '\n';
out << "#define FLT_MIN_EXP " << std::dec << std::numeric_limits<float>::min_exponent << '\n';
out << R"(/// \brief The maximum positive integer such that \f${FLT_RADIX}^{FLT_MAX_EXP}\f$ results in a non-infinite \f$float\f$.)" << '\n';
out << R"(/// \brief The maximum positive integer such that \math{\textbf{FLT_RADIX}^\textbf{FLT_MAX_EXP}} results in a non-infinite \emph{float}.)" << '\n';
out << "#define FLT_MAX_EXP " << std::dec << std::numeric_limits<float>::max_exponent << '\n';
out << R"(/// \brief The minimum negative integer such that \f${10}^{FLT_MIN_EXP}\f$ results in a normalized \f$float\f$.)" << '\n';
out << R"(/// \brief The minimum negative integer such that \math{{10}^\textbf{FLT_MIN_EXP}} results in a normalized \emph{float}.)" << '\n';
out << "#define FLT_MIN_10_EXP " << std::dec << std::numeric_limits<float>::min_exponent10 << '\n';
out << R"(/// \brief The maximum positive integer such that \f${10}^{FLT_MAX_EXP}\f$ results in a non-infinite \f$float\f$.)" << '\n';
out << R"(/// \brief The maximum positive integer such that \math{{10}^\textbf{FLT_MAX_EXP}} results in a non-infinite \emph{float}.)" << '\n';
out << "#define FLT_MAX_10_EXP " << std::dec << std::numeric_limits<float>::max_exponent10 << '\n';
out << R"(/// \brief Do arithmetics operations with \f$float\f$ trap?)" << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{float} trap?)" << '\n';
out << "#define FLT_TRAPS " << std::dec << std::numeric_limits<float>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \f$float\f$ check for underflow?)" << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{float} check for underflow?)" << '\n';
out << "#define FLT_TINYNESS_BEFORE " << std::dec << std::numeric_limits<float>::tinyness_before << '\n';
out << R"(/// \brief Smallest positive, finite, normal value of \f$float\f$.)" << '\n';
out << R"(/// \brief Smallest positive, finite, normal value of \emph{float}.)" << '\n';
out << "#define FLT_MIN " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::min() ) << ")" << '\n';
out << R"(/// \brief Largest positive, finite value of \f$float\f$.)" << '\n';
out << R"(/// \brief Largest positive, finite value of \emph{float}.)" << '\n';
out << "#define FLT_MAX " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::max() ) << ")" << '\n';
out << R"(/// \brief The difference between \f$1.0\f$ and the next representable value of \f$float\f$.)" << '\n';
out << R"(/// \brief The difference between \emph{1.0} and the next representable value of \emph{float}.)" << '\n';
out << "#define FLT_EPSILON " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::epsilon() ) << ")" << '\n';
out << R"(/// \brief A value representing \f$\inf\f$ of type \f$float\f$.)" << '\n';
out << R"(/// \brief A value representing \emph{\inf} of type \emph{float}.)" << '\n';
out << "#define FLT_INF " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::infinity() ) << ")" << '\n';
out << R"(/// \brief A value representing \f$NaN\f$ of type \f$float\f$ that does not trap.)" << '\n';
out << R"(/// \brief A value representing \emph{NaN} of type \emph{float} that does not trap.)" << '\n';
out << "#define FLT_QUIET_NAN " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::quiet_NaN() ) << ")" << '\n';
out << R"(/// \brief A value representing \f$NaN\f$ of type \f$float\f$ that traps.)" << '\n';
out << R"(/// \brief A value representing \emph{NaN} of type \emph{float} that traps.)" << '\n';
out << "#define FLT_SIGNALING_NAN " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::signaling_NaN()) << ")" << '\n';
out << R"(/// \brief Smallest positive, finite, subnormal value of \f$float\f$.)" << '\n';
out << R"(/// \brief Smallest positive, finite, subnormal value of \emph{float}.)" << '\n';
out << "#define FLT_DENORM_MIN " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::denorm_min() ) << ")" << '\n';
out << R"(/// \brief Maximum rounding error of type \f$float\f$.)" << '\n';
out << R"(/// \brief Maximum rounding error of type \emph{float}.)" << '\n';
out << "#define FLT_ROUND_ERR " << "fennec::bit_cast<float>(0x" << std::hex << std::bit_cast<int>(std::numeric_limits<float>::round_error() ) << ")" << '\n';
out << "" << '\n';
@@ -209,80 +209,80 @@ inline void float_h()
out << "" << '\n';
out << R"(/// \brief Does \f$double\f$ have an infinity?)" << '\n';
out << R"(/// \brief Does \emph{double} have an infinity?)" << '\n';
out << "#define DBL_HAS_INFINITY " << std::dec << std::numeric_limits<double>::has_infinity << '\n';
out << R"(/// \brief Does \f$double\f$ have a quiet NaN?)" << '\n';
out << R"(/// \brief Does \emph{double} have a quiet NaN?)" << '\n';
out << "#define DBL_HAS_QUIET_NAN " << std::dec << std::numeric_limits<double>::has_quiet_NaN << '\n';
out << R"(/// \brief Does \f$double\f$ have a signaling NaN?)" << '\n';
out << R"(/// \brief Does \emph{double} have a signaling NaN?)" << '\n';
out << "#define DBL_HAS_SIGNALING_NAN " << std::dec << std::numeric_limits<double>::has_signaling_NaN << '\n';
out << R"(/// \brief Does \f$double\f$ use denormalization?)" << '\n';
out << R"(/// \brief Does \emph{double} use denormalization?)" << '\n';
out << "#define DBL_HAS_DENORM " << std::dec << std::numeric_limits<double>::has_denorm << '\n';
out << R"(/// \brief Does \f$double\f$ have loss with denormalization?)" << '\n';
out << R"(/// \brief Does \emph{double} have loss with denormalization?)" << '\n';
out << "#define DBL_HAS_DENORM_LOSS " << std::dec << std::numeric_limits<double>::has_denorm_loss << '\n';
out << R"(/// \brief What rounding style does \f$double\f$ use?)" << '\n';
out << R"(/// \brief What rounding style does \emph{double} use?)" << '\n';
out << "#define DBL_ROUNDS " << std::dec << std::numeric_limits<double>::round_style << '\n';
out << R"(/// \brief Does \f$double\f$ use the IEEE doubleing point specification?)" << '\n';
out << R"(/// \brief Does \emph{double} use the IEEE doubleing point specification?)" << '\n';
out << "#define DBL_IS_IEC559 " << std::dec << std::numeric_limits<double>::is_iec559 << '\n';
out << R"(/// \brief The number of mantissa bits in \f$double\f$.)" << '\n';
out << R"(/// \brief The number of mantissa bits in \emph{double}.)" << '\n';
out << "#define DBL_MANT_DIG " << std::dec << std::numeric_limits<double>::digits << '\n';
out << R"(/// \brief The number of decimal digits guaranteed to be preserved in a \f$double\f$ &rarr; \f$text\f$ &rarr; \f$double\f$.)" << '\n';
out << R"(/// \brief The number of decimal digits guaranteed to be preserved in a \emph{double} &rarr; \emph{text} &rarr; \emph{double}.)" << '\n';
out << "#define DBL_DIG " << std::dec << std::numeric_limits<double>::digits10 << '\n';
out << R"(/// \brief The decimal precision required to serialize and deserialize a \f$double\f$.)" << '\n';
out << R"(/// \brief The decimal precision required to serialize and deserialize a \emph{double}.)" << '\n';
out << "#define DBL_DECIMAL_DIG " << std::dec << std::numeric_limits<double>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$double\f$.)" << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{double}.)" << '\n';
out << "#define DBL_RADIX " << std::dec << std::numeric_limits<double>::radix << '\n';
out << R"(/// \brief The minimum negative integer such that \f${DBL_RADIX}^{DBL_MIN_EXP}\f$ results in a normalized \f$double\f$.)" << '\n';
out << R"(/// \brief The minimum negative integer such that \math{\textbf{DBL_RADIX}^\textbf{DBL_MIN_EXP}} results in a normalized \emph{double}.)" << '\n';
out << "#define DBL_MIN_EXP " << std::dec << std::numeric_limits<double>::min_exponent << '\n';
out << R"(/// \brief The maximum positive integer such that \f${DBL_RADIX}^{DBL_MAX_EXP}\f$ results in a non-infinite \f$double\f$.)" << '\n';
out << R"(/// \brief The maximum positive integer such that \math{\textbf{DBL_RADIX}^\textbf{DBL_MAX_EXP}} results in a non-infinite \emph{double}.)" << '\n';
out << "#define DBL_MAX_EXP " << std::dec << std::numeric_limits<double>::max_exponent << '\n';
out << R"(/// \brief The minimum negative integer such that \f${10}^{DBL_MIN_EXP}\f$ results in a normalized \f$double\f$.)" << '\n';
out << R"(/// \brief The minimum negative integer such that \math{{10}^\textbf{DBL_MIN_EXP}} results in a normalized \emph{double}.)" << '\n';
out << "#define DBL_MIN_10_EXP " << std::dec << std::numeric_limits<double>::min_exponent10 << '\n';
out << R"(/// \brief The maximum positive integer such that \f${10}^{DBL_MAX_EXP}\f$ results in a non-infinite \f$double\f$.)" << '\n';
out << R"(/// \brief The maximum positive integer such that \math{{10}^\textbf{DBL_MAX_EXP}} results in a non-infinite \emph{double}.)" << '\n';
out << "#define DBL_MAX_10_EXP " << std::dec << std::numeric_limits<double>::max_exponent10 << '\n';
out << R"(/// \brief Do arithmetics operations with \f$double\f$ trap?)" << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{double} trap?)" << '\n';
out << "#define DBL_TRAPS " << std::dec << std::numeric_limits<double>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \f$double\f$ check for underflow?)" << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{double} check for underflow?)" << '\n';
out << "#define DBL_TINYNESS_BEFORE " << std::dec << std::numeric_limits<double>::tinyness_before << '\n';
out << R"(/// \brief Smallest positive, finite, normal value of \f$double\f$.)" << '\n';
out << R"(/// \brief Smallest positive, finite, normal value of \emph{double}.)" << '\n';
out << "#define DBL_MIN " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::min() ) << "ll)" << '\n';
out << R"(/// \brief Largest positive, finite value of \f$double\f$.)" << '\n';
out << R"(/// \brief Largest positive, finite value of \emph{double}.)" << '\n';
out << "#define DBL_MAX " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::max() ) << "ll)" << '\n';
out << R"(/// \brief The difference between \f$1.0\f$ and the next representable value of \f$double\f$.)" << '\n';
out << R"(/// \brief The difference between \emph{1.0} and the next representable value of \emph{double}.)" << '\n';
out << "#define DBL_EPSILON " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::epsilon() ) << "ll)" << '\n';
out << R"(/// \brief A value representing \f$\inf\f$ of type \f$double\f$.)" << '\n';
out << R"(/// \brief A value representing \emph{\inf} of type \emph{double}.)" << '\n';
out << "#define DBL_INF " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::infinity() ) << "ll)" << '\n';
out << R"(/// \brief A value representing \f$NaN\f$ of type \f$double\f$ that does not trap.)" << '\n';
out << R"(/// \brief A value representing \emph{NaN} of type \emph{double} that does not trap.)" << '\n';
out << "#define DBL_QUIET_NAN " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::quiet_NaN() ) << "ll)" << '\n';
out << R"(/// \brief A value representing \f$NaN\f$ of type \f$double\f$ that traps.)" << '\n';
out << R"(/// \brief A value representing \emph{NaN} of type \emph{double} that traps.)" << '\n';
out << "#define DBL_SIGNALING_NAN " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::signaling_NaN()) << "ll)" << '\n';
out << R"(/// \brief Smallest positive, finite, subnormal value of \f$double\f$.)" << '\n';
out << R"(/// \brief Smallest positive, finite, subnormal value of \emph{double}.)" << '\n';
out << "#define DBL_DENORM_MIN " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::denorm_min() ) << "ll)" << '\n';
out << R"(/// \brief Maximum rounding error of type \f$double\f$.)" << '\n';
out << R"(/// \brief Maximum rounding error of type \emph{double}.)" << '\n';
out << "#define DBL_ROUND_ERR " << "fennec::bit_cast<double>(0x" << std::hex << std::bit_cast<long long>(std::numeric_limits<double>::round_error() ) << "ll)" << '\n';
out << "" << '\n';

View File

@@ -66,380 +66,388 @@ inline void integer_h()
out << "" << '\n';
out << "#undef CHAR_MIN" << '\n';
out << "#undef CHAR_MAX" << '\n';
out << "#undef WCHAR_MIN" << '\n';
out << "#undef WCHAR_MAX" << '\n';
out << "#undef SCHAR_MIN" << '\n';
out << "#undef SCHAR_MAX" << '\n';
out << "#undef UCHAR_MIN" << '\n';
out << "#undef UCHAR_MAX" << '\n';
out << "#undef INT_MIN" << '\n';
out << "#undef INT_MAX" << '\n';
out << "#undef UINT_MIN" << '\n';
out << "#undef UINT_MAX" << '\n';
out << "#undef LONG_MIN" << '\n';
out << "#undef LONG_MAX" << '\n';
out << "#undef ULONG_MIN" << '\n';
out << "#undef ULONG_MAX" << '\n';
out << "#undef LLONG_MIN" << '\n';
out << "#undef LLONG_MAX" << '\n';
out << "#undef CHAR_MIN" << '\n';
out << "#undef CHAR_MAX" << '\n';
out << "#undef WCHAR_MIN" << '\n';
out << "#undef WCHAR_MAX" << '\n';
out << "#undef SCHAR_MIN" << '\n';
out << "#undef SCHAR_MAX" << '\n';
out << "#undef UCHAR_MIN" << '\n';
out << "#undef UCHAR_MAX" << '\n';
out << "#undef INT_MIN" << '\n';
out << "#undef INT_MAX" << '\n';
out << "#undef UINT_MIN" << '\n';
out << "#undef UINT_MAX" << '\n';
out << "#undef LONG_MIN" << '\n';
out << "#undef LONG_MAX" << '\n';
out << "#undef ULONG_MIN" << '\n';
out << "#undef ULONG_MAX" << '\n';
out << "#undef LLONG_MIN" << '\n';
out << "#undef LLONG_MAX" << '\n';
out << "#undef ULLONG_MIN" << '\n';
out << "#undef ULLONG_MAX" << '\n';
out << "" << '\n';
// TODO: Fix this to generate info without using the c++stdlib for platforms without this available.
// TODO: Fix this to generate info without using the c+stdlib for platforms without this available.
out << R"(/// \brief Is \f$char\f$ signed?)" << '\n';
out << "#define CHAR_IS_SIGNED " << std::boolalpha << std::numeric_limits<char>::is_signed << '\n';
out << R"(/// \brief Is \emph{char} signed?)" << '\n';
out << "#define CHAR_IS_SIGNED " << std::boolalpha << std::numeric_limits<char>::is_signed << '\n';
out << R"(/// \brief Rounding style of type \f$char\f$.)" << '\n';
out << "#define CHAR_ROUNDS " << "0x" << std::hex << (int)std::numeric_limits<char>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{char}.)" << '\n';
out << "#define CHAR_ROUNDS " << std::hex << std::showbase << (int)std::numeric_limits<char>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$char\f$.)" << '\n';
out << "#define CHAR_RADIX_DIG " << "0x" << std::hex << (int)std::numeric_limits<char>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{char}.)" << '\n';
out << "#define CHAR_RADIX_DIG " << std::hex << std::showbase << (int)std::numeric_limits<char>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$char\f$.)" << '\n';
out << "#define CHAR_DIG " << "0x" << std::hex << (int)std::numeric_limits<char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{char}.)" << '\n';
out << "#define CHAR_DIG " << std::hex << std::showbase << (int)std::numeric_limits<char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$char\f$.)" << '\n';
out << "#define CHAR_DECIMAL_DIG " << "0x" << std::hex << (int)std::numeric_limits<char>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{char}.)" << '\n';
out << "#define CHAR_DECIMAL_DIG " << std::hex << std::showbase << (int)std::numeric_limits<char>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$char\f$.)" << '\n';
out << "#define CHAR_RADIX " << "0x" << std::hex << (int)std::numeric_limits<char>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{char}.)" << '\n';
out << "#define CHAR_RADIX " << std::hex << std::showbase << (int)std::numeric_limits<char>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$char\f$ trap?)" << '\n';
out << "#define CHAR_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<char>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{char} trap?)" << '\n';
out << "#define CHAR_TRAPS " << std::boolalpha << std::numeric_limits<char>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$char\f$.)" << '\n';
out << "#define CHAR_MIN " << "0x" << std::hex << (0xFF & +std::numeric_limits<char>::min()) << '\n';
out << R"(/// \brief Smallest finite value of \emph{char}.)" << '\n';
if (std::numeric_limits<char>::is_signed) {
out << "#define CHAR_MIN -" << std::format("{:#2x}", 0xFF & std::numeric_limits<char>::min()) << '\n';
} else {
out << "#define CHAR_MIN " << std::format("{:#2x}", 0xFF & std::numeric_limits<char>::min()) << '\n';
}
out << R"(/// \brief Largest finite value of \f$char\f$.)" << '\n';
out << "#define CHAR_MAX " << "0x" << std::hex << (0xFF & +std::numeric_limits<char>::max()) << '\n';
out << R"(/// \brief Largest finite value of \emph{char}.)" << '\n';
out << "#define CHAR_MAX " << std::format("{:#2x}", 0xFF & std::numeric_limits<char>::max()) << '\n';
out << "" << '\n';
out << R"(/// \brief Is \f$wchar_t\f$ signed?)" << '\n';
out << "#define WCHAR_IS_SIGNED " << std::boolalpha << std::numeric_limits<wchar_t>::is_signed << '\n';
out << R"(/// \brief Is \emph{wchar_t} signed?)" << '\n';
out << "#define WCHAR_IS_SIGNED " << std::boolalpha << std::numeric_limits<wchar_t>::is_signed << '\n';
out << R"(/// \brief Rounding style of type \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_ROUNDS " << "0x" << std::hex << std::numeric_limits<wchar_t>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_ROUNDS " << std::hex << std::showbase << std::numeric_limits<wchar_t>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<wchar_t>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<wchar_t>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_DIG " << "0x" << std::hex << std::numeric_limits<wchar_t>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_DIG " << std::hex << std::showbase << std::numeric_limits<wchar_t>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<wchar_t>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<wchar_t>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_RADIX " << "0x" << std::hex << std::numeric_limits<wchar_t>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_RADIX " << std::hex << std::showbase << std::numeric_limits<wchar_t>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$wchar_t\f$ trap?)" << '\n';
out << "#define WCHAR_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<wchar_t>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{wchar_t} trap?)" << '\n';
out << "#define WCHAR_TRAPS " << std::boolalpha << std::numeric_limits<wchar_t>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_MIN " << "0x" << std::hex << +std::numeric_limits<wchar_t>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{wchar_t}.)" << '\n';
if (std::numeric_limits<wchar_t>::is_signed) {
out << "#define WCHAR_MIN -" << std::format("{:#4x}", 0xFFFF & std::numeric_limits<wchar_t>::min()) << '\n';
} else {
out << "#define WCHAR_MIN " << std::format("{:#4x}", 0xFFFF & std::numeric_limits<wchar_t>::min()) << '\n';
}
out << R"(/// \brief Largest finite value of \f$wchar_t\f$.)" << '\n';
out << "#define WCHAR_MAX " << "0x" << std::hex << +std::numeric_limits<wchar_t>::max() << '\n';
out << R"(/// \brief Largest finite value of \emph{wchar_t}.)" << '\n';
out << "#define WCHAR_MAX " << std::format("{:#04x}", 0xFFFF & std::numeric_limits<wchar_t>::max()) << '\n';
out << "" << '\n';
out << R"(/// \brief Is \f$signed char\f$ signed?)" << '\n';
out << "#define SCHAR_ROUNDS " << "0x" << std::hex << (int)std::numeric_limits<signed char>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{signed char}.)" << '\n';
out << "#define SCHAR_ROUNDS " << std::hex << std::showbase << (int)std::numeric_limits<signed char>::round_style << '\n';
out << R"(/// \brief Rounding style of type \f$signed char\f$.)" << '\n';
out << "#define SCHAR_RADIX_DIG " << "0x" << std::hex << (int)std::numeric_limits<signed char>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{signed char}.)" << '\n';
out << "#define SCHAR_RADIX_DIG " << std::hex << std::showbase << (int)std::numeric_limits<signed char>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \f$signed char\f$.)" << '\n';
out << "#define SCHAR_DIG " << "0x" << std::hex << (int)std::numeric_limits<signed char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{signed char}.)" << '\n';
out << "#define SCHAR_DIG " << std::hex << std::showbase << (int)std::numeric_limits<signed char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$signed char\f$.)" << '\n';
out << "#define SCHAR_DECIMAL_DIG " << "0x" << std::hex << (int)std::numeric_limits<signed char>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{signed char}.)" << '\n';
out << "#define SCHAR_DECIMAL_DIG " << std::hex << std::showbase << (int)std::numeric_limits<signed char>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$signed char\f$.)" << '\n';
out << "#define SCHAR_RADIX " << "0x" << std::hex << (int)std::numeric_limits<signed char>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{signed char}.)" << '\n';
out << "#define SCHAR_RADIX " << std::hex << std::showbase << (int)std::numeric_limits<signed char>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$signed char\f$ trap?)" << '\n';
out << "#define SCHAR_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<signed char>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{signed char} trap?)" << '\n';
out << "#define SCHAR_TRAPS " << std::boolalpha << std::numeric_limits<signed char>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$signed char\f$.)" << '\n';
out << "#define SCHAR_MIN " << "0x" << std::hex << (0xFF & +std::numeric_limits<signed char>::min()) << '\n';
out << R"(/// \brief Smallest finite value of \emph{signed char}.)" << '\n';
out << "#define SCHAR_MIN -" << std::format("{:#2x}", 0xFF & std::numeric_limits<signed char>::min()) << '\n';
out << R"(/// \brief Largest finite value of \f$signed char\f$.)" << '\n';
out << "#define SCHAR_MAX " << "0x" << std::hex << (0xFF & +std::numeric_limits<signed char>::max()) << '\n';
out << R"(/// \brief Largest finite value of \emph{signed char}.)" << '\n';
out << "#define SCHAR_MAX " << std::format("{:#2x}", 0xFF & std::numeric_limits<signed char>::max()) << '\n';
out << "" << '\n';
out << R"(/// \brief Is \f$unsigned char\f$ unsigned?)" << '\n';
out << "#define UCHAR_ROUNDS " << "0x" << std::hex << (int)std::numeric_limits<unsigned char>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_ROUNDS " << std::hex << std::showbase << (int)std::numeric_limits<unsigned char>::round_style << '\n';
out << R"(/// \brief Rounding style of type \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_RADIX_DIG " << "0x" << std::hex << (int)std::numeric_limits<unsigned char>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_RADIX_DIG " << std::hex << std::showbase << (int)std::numeric_limits<unsigned char>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_DIG " << "0x" << std::hex << (int)std::numeric_limits<unsigned char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_DIG " << std::hex << std::showbase << (int)std::numeric_limits<unsigned char>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_DECIMAL_DIG " << "0x" << std::hex << (int)std::numeric_limits<unsigned char>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_DECIMAL_DIG " << std::hex << std::showbase << (int)std::numeric_limits<unsigned char>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_RADIX " << "0x" << std::hex << (int)std::numeric_limits<unsigned char>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_RADIX " << std::hex << std::showbase << (int)std::numeric_limits<unsigned char>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$unsigned char\f$ trap?)" << '\n';
out << "#define UCHAR_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<unsigned char>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{unsigned char} trap?)" << '\n';
out << "#define UCHAR_TRAPS " << std::boolalpha << std::numeric_limits<unsigned char>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_MIN " << "0x" << std::hex << (0xFF & +std::numeric_limits<unsigned char>::min()) << '\n';
out << R"(/// \brief Smallest finite value of \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_MIN " << std::format("{:#2x}", 0xFF & std::numeric_limits<unsigned char>::min()) << '\n';
out << R"(/// \brief Largest finite value of \f$unsigned char\f$.)" << '\n';
out << "#define UCHAR_MAX " << "0x" << std::hex << (0xFF & +std::numeric_limits<unsigned char>::max()) << '\n';
out << R"(/// \brief Largest finite value of \emph{unsigned char}.)" << '\n';
out << "#define UCHAR_MAX " << std::format("{:#2x}", 0xFF & std::numeric_limits<unsigned char>::max()) << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$short\f$.)" << '\n';
out << "#define SHORT_ROUNDS " << "0x" << std::hex << std::numeric_limits<short>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{short}.)" << '\n';
out << "#define SHORT_ROUNDS " << std::hex << std::showbase << std::numeric_limits<short>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$short\f$.)" << '\n';
out << "#define SHORT_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<short>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{short}.)" << '\n';
out << "#define SHORT_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<short>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$short\f$.)" << '\n';
out << "#define SHORT_DIG " << "0x" << std::hex << std::numeric_limits<short>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{short}.)" << '\n';
out << "#define SHORT_DIG " << std::hex << std::showbase << std::numeric_limits<short>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$short\f$.)" << '\n';
out << "#define SHORT_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<short>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{short}.)" << '\n';
out << "#define SHORT_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<short>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$short\f$.)" << '\n';
out << "#define SHORT_RADIX " << "0x" << std::hex << std::numeric_limits<short>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{short}.)" << '\n';
out << "#define SHORT_RADIX " << std::hex << std::showbase << std::numeric_limits<short>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$short\f$ trap?)" << '\n';
out << "#define SHORT_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<short>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{short} trap?)" << '\n';
out << "#define SHORT_TRAPS " << std::boolalpha << std::numeric_limits<short>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$short\f$.)" << '\n';
out << "#define SHORT_MIN " << "0x" << std::hex << +std::numeric_limits<short>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{short}.)" << '\n';
out << "#define SHORT_MIN " << std::hex << std::showbase << std::numeric_limits<short>::min() << '\n';
out << R"(/// \brief Largest finite value of \f$short\f$.)" << '\n';
out << "#define SHORT_MAX " << "0x" << std::hex << +std::numeric_limits<short>::max() << '\n';
out << R"(/// \brief Largest finite value of \emph{short}.)" << '\n';
out << "#define SHORT_MAX " << std::hex << std::showbase << std::numeric_limits<short>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_ROUNDS " << "0x" << std::hex << std::numeric_limits<unsigned short>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{unsigned short}.)" << '\n';
out << "#define USHORT_ROUNDS " << std::hex << std::showbase << std::numeric_limits<unsigned short>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<unsigned short>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{unsigned short}.)" << '\n';
out << "#define USHORT_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned short>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_DIG " << "0x" << std::hex << std::numeric_limits<unsigned short>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{unsigned short}.)" << '\n';
out << "#define USHORT_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned short>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<unsigned short>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{unsigned short}.)" << '\n';
out << "#define USHORT_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned short>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_RADIX " << "0x" << std::hex << std::numeric_limits<unsigned short>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{unsigned short}.)" << '\n';
out << "#define USHORT_RADIX " << std::hex << std::showbase << std::numeric_limits<unsigned short>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$unsigned short\f$ trap?)" << '\n';
out << "#define USHORT_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<unsigned short>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{unsigned short} trap?)" << '\n';
out << "#define USHORT_TRAPS " << std::boolalpha << std::numeric_limits<unsigned short>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_MIN " << "0x" << std::hex << +std::numeric_limits<unsigned short>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{unsigned short}.)" << '\n';
out << "#define USHORT_MIN " << std::hex << std::showbase << std::numeric_limits<unsigned short>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{unsigned short}.)" << '\n';
out << "#define USHORT_MAX " << std::hex << std::showbase << std::numeric_limits<unsigned short>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$unsigned short\f$.)" << '\n';
out << "#define USHORT_MAX " << "0x" << std::hex << +std::numeric_limits<unsigned short>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$int\f$.)" << '\n';
out << "#define INT_ROUNDS " << "0x" << std::hex << std::numeric_limits<int>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{int}.)" << '\n';
out << "#define INT_ROUNDS " << std::hex << std::showbase << std::numeric_limits<int>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$int\f$.)" << '\n';
out << "#define INT_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<int>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{int}.)" << '\n';
out << "#define INT_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<int>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$int\f$.)" << '\n';
out << "#define INT_DIG " << "0x" << std::hex << std::numeric_limits<int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{int}.)" << '\n';
out << "#define INT_DIG " << std::hex << std::showbase << std::numeric_limits<int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$int\f$.)" << '\n';
out << "#define INT_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<int>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{int}.)" << '\n';
out << "#define INT_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<int>::max_digits10 << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \f$int\f$.)" << '\n';
out << "#define INT_RADIX " << "0x" << std::hex << std::numeric_limits<int>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{int}.)" << '\n';
out << "#define INT_RADIX " << std::hex << std::showbase << std::numeric_limits<int>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$int\f$ trap?)" << '\n';
out << "#define INT_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<int>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{int} trap?)" << '\n';
out << "#define INT_TRAPS " << std::boolalpha << std::numeric_limits<int>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$int\f$.)" << '\n';
out << "#define INT_MIN " << "0x" << std::hex << +std::numeric_limits<int>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{int}.)" << '\n';
out << "#define INT_MIN " << std::hex << std::showbase << std::numeric_limits<int>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{int}.)" << '\n';
out << "#define INT_MAX " << std::hex << std::showbase << std::numeric_limits<int>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$int\f$.)" << '\n';
out << "#define INT_MAX " << "0x" << std::hex << +std::numeric_limits<int>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$unsigned int\f$.)" << '\n';
out << "#define UINT_ROUNDS " << "0x" << std::hex << std::numeric_limits<unsigned int>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{unsigned int}.)" << '\n';
out << "#define UINT_ROUNDS " << std::hex << std::showbase << std::numeric_limits<unsigned int>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$unsigned int\f$.)" << '\n';
out << "#define UINT_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<unsigned int>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{unsigned int}.)" << '\n';
out << "#define UINT_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned int>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$unsigned int\f$.)" << '\n';
out << "#define UINT_DIG " << "0x" << std::hex << std::numeric_limits<unsigned int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{unsigned int}.)" << '\n';
out << "#define UINT_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$unsigned int\f$.)" << '\n';
out << "#define UINT_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<unsigned int>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{unsigned int}.)" << '\n';
out << "#define UINT_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned int>::max_digits10 << '\n';
out << R"(/// \brief The radix, or unsigned integer base, used to represent a \f$unsigned int\f$.)" << '\n';
out << "#define UINT_RADIX " << "0x" << std::hex << std::numeric_limits<unsigned int>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{unsigned int}.)" << '\n';
out << "#define UINT_RADIX " << std::hex << std::showbase << std::numeric_limits<unsigned int>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$unsigned int\f$ trap?)" << '\n';
out << "#define UINT_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<unsigned int>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{unsigned int} trap?)" << '\n';
out << "#define UINT_TRAPS " << std::boolalpha << std::numeric_limits<unsigned int>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$unsigned int\f$.)" << '\n';
out << "#define UINT_MIN " << "0x" << std::hex << +std::numeric_limits<unsigned int>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{unsigned int}.)" << '\n';
out << "#define UINT_MIN " << std::hex << std::showbase << std::numeric_limits<unsigned int>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{unsigned int}.)" << '\n';
out << "#define UINT_MAX " << std::hex << std::showbase << std::numeric_limits<unsigned int>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$unsigned int\f$.)" << '\n';
out << "#define UINT_MAX " << "0x" << std::hex << +std::numeric_limits<unsigned int>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$long int\f$.)" << '\n';
out << "#define LONG_ROUNDS " << "0x" << std::hex << std::numeric_limits<long int>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{long int}.)" << '\n';
out << "#define LONG_ROUNDS " << std::hex << std::showbase << std::numeric_limits<long int>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$long int\f$.)" << '\n';
out << "#define LONG_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<long int>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{long int}.)" << '\n';
out << "#define LONG_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<long int>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$long int\f$.)" << '\n';
out << "#define LONG_DIG " << "0x" << std::hex << std::numeric_limits<long int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{long int}.)" << '\n';
out << "#define LONG_DIG " << std::hex << std::showbase << std::numeric_limits<long int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$long int\f$.)" << '\n';
out << "#define LONG_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<long int>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{long int}.)" << '\n';
out << "#define LONG_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<long int>::max_digits10 << '\n';
out << R"(/// \brief The radix, or long integer base, used to represent a \f$long int\f$.)" << '\n';
out << "#define LONG_RADIX " << "0x" << std::hex << std::numeric_limits<long int>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{long int}.)" << '\n';
out << "#define LONG_RADIX " << std::hex << std::showbase << std::numeric_limits<long int>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$long int\f$ trap?)" << '\n';
out << "#define LONG_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<long int>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{long int} trap?)" << '\n';
out << "#define LONG_TRAPS " << std::boolalpha << std::numeric_limits<long int>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$long int\f$.)" << '\n';
out << "#define LONG_MIN " << "0x" << std::hex << +std::numeric_limits<long int>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{long int}.)" << '\n';
out << "#define LONG_MIN " << std::hex << std::showbase << std::numeric_limits<long int>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{long int}.)" << '\n';
out << "#define LONG_MAX " << std::hex << std::showbase << std::numeric_limits<long int>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$long int\f$.)" << '\n';
out << "#define LONG_MAX " << "0x" << std::hex << +std::numeric_limits<long int>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_ROUNDS " << "0x" << std::hex << std::numeric_limits<unsigned long int>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_ROUNDS " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long int>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long int>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::max_digits10 << '\n';
out << R"(/// \brief The radix, or unsigned long integer base, used to represent a \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_RADIX " << "0x" << std::hex << std::numeric_limits<unsigned long int>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_RADIX " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$unsigned long int\f$ trap?)" << '\n';
out << "#define ULONG_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<unsigned long int>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{unsigned long int} trap?)" << '\n';
out << "#define ULONG_TRAPS " << std::boolalpha << std::numeric_limits<unsigned long int>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_MIN " << "0x" << std::hex << +std::numeric_limits<unsigned long int>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_MIN " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{unsigned long int}.)" << '\n';
out << "#define ULONG_MAX " << std::hex << std::showbase << std::numeric_limits<unsigned long int>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$unsigned long int\f$.)" << '\n';
out << "#define ULONG_MAX " << "0x" << std::hex << +std::numeric_limits<unsigned long int>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$long long\f$.)" << '\n';
out << "#define LLONG_ROUNDS " << "0x" << std::hex << std::numeric_limits<long long>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{long long}.)" << '\n';
out << "#define LLONG_ROUNDS " << std::hex << std::showbase << std::numeric_limits<long long>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$long long\f$.)" << '\n';
out << "#define LLONG_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<long long>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{long long}.)" << '\n';
out << "#define LLONG_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<long long>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$long long\f$.)" << '\n';
out << "#define LLONG_DIG " << "0x" << std::hex << std::numeric_limits<long long>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{long long}.)" << '\n';
out << "#define LLONG_DIG " << std::hex << std::showbase << std::numeric_limits<long long>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$long long\f$.)" << '\n';
out << "#define LLONG_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<long long>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{long long}.)" << '\n';
out << "#define LLONG_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<long long>::max_digits10 << '\n';
out << R"(/// \brief The radix, or long longeger base, used to represent a \f$long long\f$.)" << '\n';
out << "#define LLONG_RADIX " << "0x" << std::hex << std::numeric_limits<long long>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent a \emph{long long}.)" << '\n';
out << "#define LLONG_RADIX " << std::hex << std::showbase << std::numeric_limits<long long>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$long long\f$ trap?)" << '\n';
out << "#define LLONG_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<long long>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{long long} trap?)" << '\n';
out << "#define LLONG_TRAPS " << std::boolalpha << std::numeric_limits<long long>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$long long\f$.)" << '\n';
out << "#define LLONG_MIN " << "0x" << std::hex << +std::numeric_limits<long long>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{long long}.)" << '\n';
out << "#define LLONG_MIN " << std::hex << std::showbase << std::numeric_limits<long long>::min() << '\n';
out << R"(/// \brief Largest finite value of \emph{long long}.)" << '\n';
out << "#define LLONG_MAX " << std::hex << std::showbase << std::numeric_limits<long long>::max() << '\n';
out << R"(/// \brief Largest finite value of \f$long long\f$.)" << '\n';
out << "#define LLONG_MAX " << "0x" << std::hex << +std::numeric_limits<long long>::max() << '\n';
out << "" << '\n';
out << R"(/// \brief Rounding style of type \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_ROUNDS " << "0x" << std::hex << std::numeric_limits<unsigned long long>::round_style << '\n';
out << R"(/// \brief Rounding style of type \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_ROUNDS " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::round_style << '\n';
out << R"(/// \brief Number of radix digits represented by \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_RADIX_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long long>::digits << '\n';
out << R"(/// \brief Number of radix digits represented by \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_RADIX_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::digits << '\n';
out << R"(/// \brief Number of decimal digits represented by \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long long>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits represented by \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_DECIMAL_DIG " << "0x" << std::hex << std::numeric_limits<unsigned long long>::max_digits10 << '\n';
out << R"(/// \brief Number of decimal digits necessary to differentiate all values of type \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_DECIMAL_DIG " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::max_digits10 << '\n';
out << R"(/// \brief The radix, or unsigned long longeger base, used to represent a \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_RADIX " << "0x" << std::hex << std::numeric_limits<unsigned long long>::radix << '\n';
out << R"(/// \brief The radix, or integer base, used to represent an \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_RADIX " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::radix << '\n';
out << R"(/// \brief Do arithmetics operations with \f$unsigned long long\f$ trap?)" << '\n';
out << "#define ULLONG_TRAPS " << "0x" << std::boolalpha << std::numeric_limits<unsigned long long>::traps << '\n';
out << R"(/// \brief Do arithmetics operations with \emph{unsigned long long} trap?)" << '\n';
out << "#define ULLONG_TRAPS " << std::boolalpha << std::numeric_limits<unsigned long long>::traps << '\n';
out << R"(/// \brief Smallest finite value of \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_MIN " << "0x" << std::hex << +std::numeric_limits<unsigned long long>::min() << '\n';
out << R"(/// \brief Smallest finite value of \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_MIN " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::min() << '\n';
out << R"(/// \brief Largest finite value of \f$unsigned long long\f$.)" << '\n';
out << "#define ULLONG_MAX " << "0x" << std::hex << +std::numeric_limits<unsigned long long>::max() << '\n';
out << R"(/// \brief Largest finite value of \emph{unsigned long long}.)" << '\n';
out << "#define ULLONG_MAX " << std::hex << std::showbase << std::numeric_limits<unsigned long long>::max() << '\n';
out << "" << '\n';

View File

@@ -71,8 +71,8 @@ inline void type_name_h()
std::string str = fennec::detail::f<void>();
size_t heading = str.find("void");
size_t footing = str.size() - (heading + 4);
const size_t heading = str.find("void");
const size_t footing = str.size() - (heading + 4);
out << "// " << str << std::endl;
out << "inline static constexpr size_t type_name_f_heading = " << heading << ";" << std::endl;