Если вы действительно не можете вывести правильные типы из класса typedefs (в чем я сомневаюсь, дважды проверьте документацию), вы можете указать параметры шаблона немного более явно:
template <template <typename...> class Container, typename T, typename ...Args>
void myfunc(const Container<T*, Args...> & c)
{
// ...
}
Если у вас нет шаблонов с переменным числом аргументов, вам придется указать столько аргументов, сколько принимает ваш контейнер, либо указать аргументы по умолчанию, если вы хотите, чтобы шаблон соответствовал им. Вот версия по умолчанию, которая работает для контейнеров с двумя параметрами:
template <template <typename A, typename = std::allocator<A> > class Container,
typename T>
void myfunc(const Container<T*> & c);
Это будет соответствовать только Container<T*, std::allocator<T*>>
. Вот общая версия для двухпараметрических контейнеров:
template <template <typename , typename> class Container,
typename T1, typename T2>
void myfunc(const Container<T1*, T2> & c);
Конкретно, ваша функция должна быть вариацией этого:
template <template <typename> class Container, typename T>
void myfunc(const boost::ptr_list<A<Container::<T*> > > &);