template<>
class std::formatter<Always41>
{
int width = 0; // specified width of the field
public: // parse the format string for this type:
constexpr auto parse(std::format_parse_context& ctx) {
auto pos = ctx.begin();
while (pos != ctx.end() && *pos != '}') {
if (*pos < '0' || *pos > '9') {
throw std::format_error{std::format("invalid format '{}'", *pos)};
}
width = width * 10 + *pos - '0'; // new digit for the width
++pos;
}
return pos; // return position of }
}
// format by always writing its value:
auto format(const Always41& obj, std::format_context& ctx) const {
return std::format_to(ctx.out(), "{:{}}", obj.getValue(), width);
}
};