Джонатан Wakely-х answer на вопрос Type trait to check that all types in a parameter pack are copy constructible дает простой (МОГ) способ проверить, если все переменные расширенных в параметре пакета одного и того же типа - например:Проверьте параметр обновления для всех типов T
#include <type_traits>
namespace detail {
enum class enabler {};
}
template <bool Condition>
using EnableIf =
typename std::enable_if<Condition, detail::enabler>::type;
template<typename... Conds>
struct and_ : std::true_type {};
template<typename Cond, typename... Conds>
struct and_<Cond, Conds...>
: std::conditional<Cond::value, and_<Conds...>,
std::false_type>::type {};
template<typename... T>
using areInts = and_<std::is_same<T,int>...>;
template<typename... T>
using areMySpecificClass = and_<std::is_same<T,MySpecificClass>...>;
Я не могу решить, как это расширить, написать шаблон, например areTypeT
.
Мои первые попытки наткнулись на «Пакет параметров« T »должен быть в конце списка параметров шаблона». Моя недавняя попытка компиляции, но если я ее использую, то я получаю сбои замещения:
template<typename Target>
template<typename... T1>
using areT = and_<std::is_same<T1,Target>...>;
Как это сделать?