Пропустить неверный аргумент шаблона

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 ".

Ответы

Ответ 1

Самый простой способ иметь тип undefined, о котором вы говорите:

std::enable_if_t<false>

Итак, вы можете вызвать свой шаблон foo следующим образом:

foo<int, std::enable_if_t<false>>(13)

И не получится ли это, как вы просили.