Salut à vous!
Je souhaite surcharger un trait pour une template de structure (Item) membre d'une autre template de structure (System).
Bien entendu, je n'y arrive pas.
Mon compilateur est Visual C++ 2019 en 16.9.6.
Voici le code:
Visual se plaint pour [c]T[§c] et Ts....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template <typename... Ts> // requires Ts.. tous distincts struct System { template <typename T> // requires T est dans Ts struct Item { static constexpr std::size_t index = 0;// en vrai, c'est index_in_types<T, Ts...>, mais pour l'exemple, ca suffira bien. }; }; // le trait (cas général) template <typename T> struct trait: std::false_type {}; // le cas que j'essaie d'écrire template <typename T, typename... Ts> struct trait< typename System<Ts...>::template Item<T> >: std::true_type {};
Soit je suis bigleuse, soit il y a quelque chose d'étrange dont j'ai pas conscience.Envoyé par Visual C++
Et si j'introduis un alias, j'obtiens le même résultat.
L'idée sous-jacente est de pouvoir écrire un concept qui accepte les Item et quelques types construits avec (technique du template expression)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template <typename T, typename... Ts> using alias = typename System<Ts...>::template Item<T>; template <typename T, typename... Ts> struct trait< alias <T, Ts...> >: std::true_type {};
Comment puis-je m'en sortir?
Partager