Skip to content
Go back

C++:type_identity

· Updated:
  • type_identity<T>は受け取った型を返すだけのtype_traits
  • クラステンプレートに包まれたパラメータは推論できないことを利用して、明示的に型推論を無効化するのに使う
  • 実践として、format_stringのパラメータを、フォーマット文字列の型ではなく、後続の引数の型から推論させるために使われている
    • format_stringconstevalで書式の検査を行うためにパラメータを必要とする
template <typename... Ts>
struct format_string {
    consteval F(string_view str) : str{str} {}
    string_view str;
};

template <typename... Ts>
using format_string_t = format_string<type_identity_t<Ts>...>;
 // type_identityがないと、fmtに与えられる引数から型を推論しようとするのでエラーになる。

template <typename... Ts>
void format(format_string_t<Ts...> fmt, Ts&&...);