我正在阅读有关SFINAE的 Wikipedia 文章并遇到以下代码示例:
struct Test
{
typedef int Type;
};
template < typename T >
void f( typename T::Type ) {} // definition #1
template < typename T >
void f( T ) {} // definition #2
void foo()
{
f< Test > ( 10 ); //call #1
f< int > ( 10 ); //call #2 without error thanks to SFINAE
}
现在我实际上以前写过这样的代码,不知何故我直觉地知道我需要输入“typename T”而不仅仅是“T”。但是,很高兴知道它背后的实际逻辑。有人愿意解释吗?