我正在编写一个用户定义的string文字来将月份的名称转换为它们的数字。该文字的预期用法类似于
"Nov"_m
应该返回11。
目前我的代码看起来像
constexpr Duration operator ""_m(const char* str, size_t len)
{
return convert_month_to_int(str, len);
}
whereconstexpr int convert_month_to_int(const char, size_t)是一个进行实际转换的函数(-1如果月份名称不正确,则返回)。
问题是如果传递给这个文字的字符串没有命名任何月份,我想显示某种编译错误。我尝试通过static_assert以下方式使用:
constexpr Duration operator ""_m(const char* str, size_t len)
{
static_assert(convert_month_to_int(str, len) > 0, "Error");
return convert_month_to_int(str, len);
}
但这不起作用,因为编译器不确定这convert_month_to_int(str, len)将是一个常量表达式。
有没有办法实现这种行为?