У меня есть класс-шаблон с функцией-членом шаблона с переменным числом аргументов, которую я не могу вызывать извне класса. Это упрощенный пример того, что я пытаюсь сделать.:
template<typename T>
struct foo{
foo(){}
template<int... I>
int run(){
return sizeof...(I); // or whatever
}
};
template<int... I>
int run_int(){
return foo<int>().run<I...>(); // OK
}
template<typename T, int... I>
int run_T(){
return foo<T>().run<I...>(); // error
}
Когда foo является специализированным, я могу без проблем вызвать его функцию-член шаблона run(). Но если я попытаюсь вызвать его из функции или структуры, которые не специализируются на foo, gcc(4.7)выдает ошибку, говорящую о том, что «пакеты параметров не расширены с помощью ‘…’». Я попробовал то же самое с clang (3.1), но получил аналогичную ошибку ("выражение ошибки :содержит нерасширенный пакет параметров 'I'" ).
Может ли кто-нибудь помочь мне понять, почему последняя функция не компилируется? На данный момент я могу обойти это, сделав "int...I" параметром не-типа самого foo, а затем вызвать его таким образом извне :
foo<T, I...>().run()
, но я все еще озадачен тем, почему он не компилируется другой способ.