引用了3.3.9/1:
类的模板形参名称的声明性区域Template Template -parameter是最小的模板参数列表
你能举个例子来理解上面的定义吗?我也有兴趣知道模板参数的模板参数列表是什么意思?下面是一个很有帮助的例子
template< // outer template-parameter-list
template< // inner template-parameter-list
typename q, // named parameter of a template template-parameter
q x // use that name
> // the declarative region ends here
class q // hence the name may be reused
> struct x {};
这里还是没有注释,如果有帮助的话:
template< template< typename q, q x > class q >
struct x {};
是在模板上参数化的类,接受给定类型的常数值。例如,您可以使用x< std::integral_constant >
它将模板模板参数的范围限制在最内层的参数列表中,例如以下是有效的
template<template<typename U, typename V = U> class T>
struct foo
{
T<int> bar(); // T<int, int>
};
但这不是
template<template<typename U> class T>
struct foo
{
U bar(); // error: ‘U’ does not name a type
};