我正在编写一个用户定义的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)
将是一个常量表达式。
有没有办法实现这种行为?