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