Как применить parameter pack (pack expansion) на enable_if (until C++20 SFINAE)?
Основная проблема в том, что paremeter pack
должен быть последним параметром в списке, а до него о Ts
ещё ничего не известно. Но и при выносе enable_if
за пределы параметров шаблона ничего не меняется. Вот:
template<typename T>
using RemoveCVR = std::remove_reference_t<std::remove_cv_t<T>>;
template<typename T1, typename T2>
static inline constexpr bool IsSimilar =
std::is_same_v<RemoveCVR<T1>,RemoveCVR<T2>>;
template<
typename... Ts,
typename std::enable_if_t<IsSimilar<Ts,std::string>>...
>
void f();
template<
typename std::enable_if_t<IsSimilar<Ts,std::string>>...,
typename... Ts
>
void f();
template<typename... Ts>
typename std::enable_if_t<IsSimilar<Ts,std::string>>... f();
Есть ли способ?
Источник: Stack Overflow на русском