У меня есть шаблонный класс с переменной функцией-членом шаблона, которую я не могу вызвать извне класса. Это упрощенный пример того, что я пытаюсь сделать:
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 специализируется, я могу без проблем вызвать функцию-член шаблона () (). Но если я попытаюсь вызвать его из функции или структуры, которая не специализируется на foo, gcc (4.7) выдаст ошибку, говорящую "пакеты параметров не расширены с помощью ...". Я попробовал то же самое с clang (3.1), но получил похожую ошибку («ошибка: выражение содержит нерасширенный пакет параметров« I »»).
Может кто-нибудь помочь мне понять, почему последняя функция не компилируется? Пока что я могу обойти это, сделав "int ... I" не типовым параметром самого foo, а затем вызову его так снаружи:
foo<T, I...>().run()
но я все еще озадачен, почему он не компилируется другим способом.