Я борюсь с шаблонами! Рассмотрим следующий код:Недопустимый аргумент шаблона
template <typename... Ts> struct Sequence {};
template<unsigned N> struct B {
template<unsigned P> struct C {
typedef int type;
};
};
Тогда это совершенно правильно:
template<unsigned... Is>
struct Loop2 {
typedef Sequence< typename B<5>::C<Is>::type... > type;
};
Loop2<3,1> l;
Поэтому я не могу понять, почему это шаблонный вариант:
template<unsigned N, unsigned... Is>
struct Loop3 {
typedef Sequence< typename B<N>::C<Is>::type... > type;
};
не принимается компилятором , Это поднимет следующее сообщение об ошибке:
essai.cpp:29:51: error: template argument 1 is invalid
typedef Sequence< typename B<N>::C<Is>::type... > type;
Для информации, которую я получил это с
g++ (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
Спасибо за любую помощь!
Кстати: любое предложение для лучшего названия приветствуется!
* "Поэтому я могу «Не понимаю, почему эта шаблонная версия [..] не принимается компилятором» * Поскольку может существовать шаблон <> struct B <4> {int C; }; ', то есть, что' C' является шаблоном, не является очевидным для компилятора без конкретной специализации 'B'. – dyp