Jeśli jest to możliwe, można indeksować do pakietu parametrów variadic bez rekursji. Jednak GCC jest refusing to pick up my partial specialization tutaj:Czy mogę częściowo wyspecjalizować szablon z wzorem takim jak foo <T ..., int, U ...>?
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> >
'
Czy GCC buggy, albo ja ignorując pewne ograniczenia o zmiennej liczbie argumentów szablonów?
Dzięki [temu prostemu kodowi] (http://ideone.com/CrNSc) GCC mówi: 'error: pakiet parametrów 'T' musi znajdować się na końcu listy parametrów szablonu'. Dlatego uważam, że jest to ograniczenie językowe. – Nawaz
@Nawaz To wcale nie jest to samo. –
To nie jest "dokładnie" to samo, ale komunikat o błędzie jest całkiem jasny: pakiet parametrów * musi być * na końcu listy parametrów szablonu. GCC powtarza tę samą wiadomość: http://ideone.com/2Rifn – Nawaz