Prüfen Sie, ob ein Typ im variadischen Vorlagenparameterpaket übergeben wird.

Ich habe irgendwo gehört, dass es mit der neuen C ++ 1z-Syntax wirklich einfach ist, zu überprüfen, ob ein Typ im variadischen Vorlagenparameterpaket übergeben wird - anscheinend können Sie dies mit Code tun, der fast eine Zeile lang ist. Ist das wahr? Was sind diese relevanten Merkmale? (Ich habe versucht, durch Fold-Ausdrücke zu blättern, kann aber nicht erkennen, wie ich sie in diesem Problem verwenden kann ...)

Hier ist, wie ich das Problem in C ++ 11 als Referenz gelöst habe:

#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;
};

Antworten auf die Frage(4)

Ihre Antwort auf die Frage