模板参数的模板参数列表是什么意思?

5

3.3.9/1中有一句话:

模板参数的名称所在的声明区域是最小的template-parameter-list,其中该名称被引入。

你能举一个例子来理解上述定义吗?我也想知道模板参数的template-parameter-list是什么意思?给出一个例子会更有帮助。

2个回答

5
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 >


2

它将模板模板参数的作用域限制为最内层参数列表,例如以下内容是有效的

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
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接