Если у вас есть функция с «предпочтительной» реализацией и другой «резервной» реализацией, что-то вроде следующего
namespace detail {
template <typename T, typename std::enable_if_t<...>* = nullptr>
void do_something_impl(T, some_tag) {}
// fallback technique 1
template <typename T>
void do_something_impl(T, ...) {}
// fallback technique 2
template <typename T, typename Tag>
void do_something_impl(T, Tag) {}
}
Является ли предпочтительным способом справиться с таким запасным вариантом 2 или 1? Я обычно придерживаюсь 1, потому что это самая последняя рассматриваемая перегрузка, поскольку компилятор C ++ пытается избежать ...
насколько это возможно, но есть ли какая-либо другая объективная причина, чтобы избежать 1?
Задача ещё не решена.
Других решений пока нет …