SFINAE, чтобы базовый шаблон всегда приводил к ошибке
Так что я проектирую своего родаmy_numeric_cast
функция для ограничения типов конверсий, доступных при использовании фреймворка, который я пишу.
Было довольно просто сделать что-то вроде
template<typename To, typename From>
constexpr To my_numeric_cast(From);
template<>
constexpr float my_numeric_cast<float, int>(int i) { return i; }
Который работает, позволяя использовать только приведения типов из целых чисел к плавающим объектам всякий раз, когда используется приведение. И выдает ошибку связывания всякий раз, когда предпринимается попытка приведения не в белый список.
Тем не менее, я бы очень хотел сделать это ошибкой компиляции, чтобы намного быстрее обнаружить неправильное использование.
Как сделать тело базового шаблона допустимым, ожидая его создания?