C++1z(C++17)標準ヘッダ<type_traits>に追加されるstd::void_t
クラステンプレートを用いたイディオム。クラスメンバの存在検知や、型に対して特定の式が有効なことを検知できる。
// C++1z: 型Tがメンバtypeを持つか? template <class, class = std::void_t<>> struct has_type_member : std::false_type {}; template <class T> struct has_type_member<T, void_t<typename T::type>> : std::true_type {};
// C++1z: 型Tは前置インクリメント演算可能か? template <class, class = std::void_t<>> struct has_pre_increment_member : std::false_type {}; template <class T> struct has_pre_increment_member<T, std::void_t<decltype( ++std::declval<T&>() )>> : std::true_type {};
N4502では同イディオム実装をサポートするToolkit(クラステンプレート群)のC++標準ライブラリ導入を提案している。
関連URL: