Dan ответьте на этот вопрос: Есть ли что-нибудь вроде Templatized Case-Statement DefaultType
параметр шаблона.
Возможно ли передать что-то там, что приведет к сбою времени компиляции?
Например, учитывая эту templatized функцию:
template <typename T, typename R = enable_if_t<is_integral<T>::value, int>>
R foo(T bar) {return static_cast<R>(bar);}
Этот код будет компилироваться отлично: foo(13)
Но этот код не сработает: foo(13.0)
.
Причина, по которой foo(13.0)
завершится с ошибкой во время компиляции, заключается в том, что enable_if_t
- undefined. Есть ли имя для "undefined", которое я могу передать упомянутому выше DefaultType
?
Если это так, я должен проверить это, вызвав foo<int, undefined>(13)
и сбой, если на самом деле undefined
был типом, который я ищу.
EDIT:
По-видимому, требуется больше объяснений.
Dan` static_case можно вызвать следующим образом:
template<class T>
typename static_switch<sizeof(T),
int, // default case
static_case<sizeof(char),char>,
static_case<sizeof(short),short>,
static_case<sizeof(long),long>,
static_case<sizeof(long long),long long>>::type foo(T bar){ return reinterpret_cast<decltype(foo(bar))&>(bar);}
Я хочу передать "undefined" или что-то еще для этого второго параметра, чтобы он не смог скомпилировать только при оценке этого параметра. (Параметр помечен как "случай по умолчанию".)
В моем простом тестировании передача любых двух параметров в foo
будет успешной (например, foo<int, int>(13);
) Мне нужен параметр, который будет имитировать эффект enable_if_t
, приводящий к сбою (например, когда мы вызываем foo<double>(13.0);
) В этом примере я назвал вызов foo<in, undefined>(13)
. Я просто хочу знать, что такое undefined ".