这是ISO C ++标准14.6.2.4的声明: 依赖模板参数:
类型模板参数依赖于它指定的类型 依赖。
如果常量,则整数非类型模板参数依赖 它指定的表达式取决于值。
非整数非类型模板参数依赖于其类型 是依赖的还是它具有以下任何一种形式并包含一个 nested-name-specifier,指定命名a的类名 依赖类型。
- 醇>
如果模板模板参数命名模板,则它依赖于模板 参数或是带有嵌套名称说明符的限定ID 包含一个命名依赖类型的类名。
我无法理解这些观点?
任何人都可以举例说明这些陈述吗?
答案 0 :(得分:1)
这就是我的理解。我已根据OP中的行号标记了代码内联中的各个代码段。
struct A{
void f(){}
};
template<class T> struct B{};
// The template argument B<T> is TYPE depdent on the template parameter T (1)
template<class T, class U = B<T> > struct T1{};
// The template argument c is VALUE dependent on the template non type parameter 'c' (2)
template<class T, char c, int d = c> struct T2{};
// The 2nd template argument is TYPE depdent on the template parameter T (3)
template<class T, void (T::*p)(void) = &T::f> struct T3{};
// The template template argument B is TYPE depdent on the template parameter T (4)
template<class T, template<class U = T> class V = B> struct T4{};
int main(){
T1<int> t1;
T2<int, 'A', 2> t2;
T3<A> t3;
T4<A> t4;
}