【发布时间】:2018-06-15 10:21:12
【问题描述】:
template<typename T>
struct a
{
using type = int;
typename T::type i;
};
template<typename T, typename = a<T>>
void f1(T) {}
template<typename T, typename = typename a<T>::type>
void f2(T) {}
int main()
{
f1<int>(1); // ok
f2<int>(1); // error
return 0;
}
a<int> 的实例化应该是一个错误,因为int::type 是非法的。但似乎f1<int> 不能导致a<T> 的实例化,但f2<int> 可以。是什么原因?
【问题讨论】:
标签: c++ templates instantiation implicit-instantiation