Wenn dies möglich ist, kann man in ein Variant-Template-Parameterpaket ohne Rekursion indizieren. Allerdings ist GCC refusing to pick up my partial specialization hier:Kann ich eine Vorlage mit einem Muster wie foo <T ..., int, U ...> teilweise spezialisieren?
template <int I, typename List>
struct element_impl;
template <typename... TL, int... IL, typename T, int I, typename... TR, int... IR>
struct element_impl<I, typelist<pair<TL,IL>..., pair<T,I>, pair<TR,IR>...>> {
typedef T type;
};
prog.cpp: In instantiation of '
element<0, typelist<int, double, char, float, long int> >
':
prog.cpp:52:34: instantiated from here
prog.cpp:47:79: error: invalid use of incomplete type 'struct element_impl<0, typelist<pair<int, 0>, pair<double, 1>, pair<char, 2>, pair<float, 3>, pair<long int, 4> >
'
Ist GCC Buggy, oder bin ich eine Einschränkung von variadische Vorlagen zu ignorieren?
Mit [dieser einfachen Code] (http://ideone.com/CrNSc), sagt GCC: 'Fehler: Parameter-Pack 'T' muss am Ende der Vorlage Parameterliste sein. Daher denke ich, dass es eine Sprachbeschränkung ist. – Nawaz
@Nawaz Das ist überhaupt nicht das Gleiche. –
Es ist nicht "genau" gleich, aber die Fehlermeldung ist ziemlich klar: Das Parameterpack * muss * am Ende der Vorlagenparameterliste sein. GCC wiederholt die gleiche Nachricht auch hier: http://ideone.com/2Rifn – Nawaz