Je voudrais créer une "version-conteneur" de std::integral_constant
. C'est un type paramétrés avec un des paramètres de type élément et non de type:Créer un conteneur comme std :: integral_constant
enum class A {
a = 1 << 0,
b = 1 << 1,
c = 1 << 2
};
template<typename T, T... Values>
struct static_container final {};
template<typename T, T... Ts>
constexpr auto make_static_container(T...) { // wrong
return static_container<T, Ts...>{};
}
template<typename F, F... FF>
void inline set(static_container<F, FF...>) {
std::cout << sizeof... (FF) << std::endl;
}
int main() {
constexpr static_container<A, A::a, A::b> sc1{}; //ok
constexpr auto sc2 = make_static_container(A::a, A::c); // not-ok
set(sc1);
set(sc2);
}
Ci-dessus vous pouvez voir que je peux créer sc1
avec le type explict.
Maintenant, j'aime avoir une fonction d'assistance pour créer un tel type sans spécifier le type enum (redondant).
La sortie est ici:
2
0
Tous les conseils?
Quelle est l'erreur que vous obtenez et avec quel compilateur? – DeiDei
Compile sur VS2015 – wally
[Compile avec clang] (http://coliru.stacked-crooked.com/a/604bd7401ede4373) – wally