题外话:C/C++语言中没有定义“递归”的概念,自然编译器也没有。(即使是常见的“递归函数”也只是人类眼中是“递归”,在编译器眼中它根本不区分是否调用的是同一个函数)
编译器看到 tuple<A,B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<A,B,C> : private tuple<B,C>
编译器看到 tuple<B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<B,C> : private tuple<C>
编译器看到 tuple<C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<C> : private tuple<>
编译器看到 tuple<> 就去找 tuple 的定义,找到 class tuple<>,匹配成 class tuple<>
没了,就这样结束了。
你看到编译器在不停地匹配同一个类模板,认为在递归;而编译器却不清楚这一点(主要的是不想知道,知道了也没用),它做的事很简答:遇到一个不认识的东西就去找它的适配。
编译器看到 tuple<A,B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<A,B,C> : private tuple<B,C>
编译器看到 tuple<B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<B,C> : private tuple<C>
编译器看到 tuple<C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<C> : private tuple<>
编译器看到 tuple<> 就去找 tuple 的定义,找到 class tuple<>,匹配成 class tuple<>
没了,就这样结束了。
你看到编译器在不停地匹配同一个类模板,认为在递归;而编译器却不清楚这一点(主要的是不想知道,知道了也没用),它做的事很简答:遇到一个不认识的东西就去找它的适配。