Как сказал DeadMG, тип шаблона шаблона является неполным.Например, неполный тип std :: vector соответствует template< template<class, class> class TypeWithTwoParams>
Чтобы вывести фактический тип T в вашем примере, вы можете предоставить аргумент (который имеет «полный тип») для функции.Например, в приведенном ниже коде мы можем вывести T, потому что мы передаем аргумент arg в качестве аргумента для PolicyRelatedFunction и он имеет полный тип, который позволяет компилятору делать необходимые выводы.
У меня такое ощущение, что вы пытаетесь это сделать, кроме как с помощью функции, а не структуры.Материал typeid как раз для иллюстрации того, что мы можем использовать T. Это выведет "T = std :: string"
template< template<class > class Policy, typename T>
void PolicyRelatedFunction(Policy<T>& arg)
{
if (typeid(T) == typeid(int) )
std::cout << "T = int";
else if (typeid(T) == typeid(std::string) )
std::cout << "T = std::string";
}
TemplatedType<std::string> arg;
PolicyRelatedFunction<TemplatedType>(arg);
// PolicyRelatedFunction(arg) works as well - compiler can figure it out.