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)
しかし、コンパイラはそれが定数式になるかどうかわからないため、これは機能しません。
この動作を達成する方法はありますか?