Daily bit(e) C++. Пользовательские литералы
Добавлено 26 августа 2026 в 13:15
Daily bit(e) C++ 88, поддержка пользовательских литералов в C++11.

C++11 представил пользовательские литералы, позволяющие библиотекам предоставлять строго типизированные типы значений в естественном и читаемом виде.
Обратите внимание, что единственными разрешенными базовыми типами для пользовательских литералов являются unsigned long long int, long double, символьные типы и строковые литералы.
#include <print>
namespace units
{
struct m
{
unsigned long long int value;
friend auto operator<=>(const m&, const m&) = default;
};
struct km
{
unsigned long long int value;
operator m() const
{
return {value*1000};
}
friend auto operator<=>(const km&, const km&) = default;
};
}
constexpr units::km operator"" _km(unsigned long long int v)
{
return {v};
}
constexpr units::m operator"" _m(unsigned long long int v)
{
return {v};
}
int main()
{
if (100_m < 1_km)
{
std::println("100m is less than 1km");
}
if (1001_m > 1_km)
{
std::println("1001m is more than 1km");
}
}
