Just out of curiosity: would this also work? template<typename _Tp, typename _Disc> struct _Absent {};
template<bool _Present, typename _Tp, typename _Disc = decltype([]{})> using __maybe_present_t = __conditional_t<_Present, _Tp, _Absent<_Tp, _Disc>>; That would avoid having to type 0, 1, ... manually.