Date: Thu, 10 Jul 2025 10:12:53 +0100
Would it be out of the question to have constexpr functions something
like the following?
namespace std {
namespace unicode {
enum class case_mapping : unsigned {
common = 1u,
turkish,
};
inline constexpr char32_t tolower( char32_t const c,
case_mapping const m = case_mapping::common ) noexcept
{
switch ( m )
{
case case_mapping::common:
return c + 5;
case case_mapping::turkish:
return c + 6;
}
return '\0'; // suppress compiler warning
}
} } // close namespaces std::unicode
#include <iostream>
int main(int const arg, char **const argv)
{
constexpr char32_t c = std::unicode::tolower('b');
char32_t c2 = std::unicode::tolower( (char32_t)(unsigned)arg );
std::cout << (long unsigned)c << std::endl;
std::cout << (long unsigned)c2 << std::endl;
}
like the following?
namespace std {
namespace unicode {
enum class case_mapping : unsigned {
common = 1u,
turkish,
};
inline constexpr char32_t tolower( char32_t const c,
case_mapping const m = case_mapping::common ) noexcept
{
switch ( m )
{
case case_mapping::common:
return c + 5;
case case_mapping::turkish:
return c + 6;
}
return '\0'; // suppress compiler warning
}
} } // close namespaces std::unicode
#include <iostream>
int main(int const arg, char **const argv)
{
constexpr char32_t c = std::unicode::tolower('b');
char32_t c2 = std::unicode::tolower( (char32_t)(unsigned)arg );
std::cout << (long unsigned)c << std::endl;
std::cout << (long unsigned)c2 << std::endl;
}
Received on 2025-07-10 09:13:06