我正在阅读有关SFINAE的维基百科文章,并遇到以下代码示例:
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
}
Run Code Online (Sandbox Code Playgroud)
现在我实际上已经编写了这样的代码,并且在某种程度上直觉上我知道我需要输入"typename T"而不是"T".但是,了解它背后的实际逻辑会很高兴.有人在乎解释吗?