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: