Compruebe si se pasa un tipo en el paquete de parámetros de plantilla variadic

He escuchado en alguna parte que, usando la nueva sintaxis de C ++ 1z, es realmente fácil verificar si se pasa un tipo en un paquete de parámetros de plantilla variadic, aparentemente puede hacerlo con un código que tiene una longitud de una línea. ¿Es esto cierto? ¿Cuáles son esas características relevantes? (Intenté mirar a través de las expresiones de pliegue pero no puedo ver cómo usarlas en ese problema ...)

Así es como resolví el problema en C ++ 11 como referencia:

#include <type_traits>


template<typename T, typename ...Ts>
struct contains;

template<typename T>
struct contains<T> {
    static constexpr bool value = false;
};

template<typename T1, typename T2, typename ...Ts>
struct contains<T1, T2, Ts...> {
    static constexpr bool value = std::is_same<T1, T2>::value ? true : contains<T1, Ts...>::value;
};

Respuestas a la pregunta(2)

Su respuesta a la pregunta