Gcc g+的sfinae+;4.1.2

Gcc g+的sfinae+;4.1.2,gcc,g++,sfinae,typename,Gcc,G++,Sfinae,Typename,我对使用G++4.1.2的SFINAE有一个问题 以下代码适用于4.6: #include <stdio.h> class Test { public: int x; }; template <typename T> inline T f(T v) { return v;} // Definition #2 template <typename T> inline typename T::x f(T v) { r

我对使用G++4.1.2的SFINAE有一个问题

以下代码适用于4.6:

#include <stdio.h>

class Test
{
public:
    int x;
};

template <typename T> 
inline T f(T v) { return v;}                // Definition #2

template <typename T> 
inline typename T::x f(T v) { return v.x; } // Definition #1

int main()
{
Test t;
t.x = 100;

    printf("Test.x = %d\n", f(t));
    printf("int = %d\n", f(10));
}
我需要这样的东西来处理g++4.1.2,有什么想法吗?坦白地说,我不明白这两个编译器之间怎么会有这么大的差异


或者如果你有其他选择,那就太好了。有模板的东西!或者宏…

我实际上解决了部分问题

但是对于这里的这个例子,它应该是
template
,而不是
template


所以就给我自己打个半招呼。但对于第二部分,我使用了另一种方法,这很烦人,但它奏效了。

GCC4.1.2于2007年2月13日发布;2011年通用条款4.6.0。你怎么能不期待差异?有这么多差异。。。我希望它被称为5.X,而不是4.6。。。也许那只是我。此外,我只是讨厌被4.1.2所束缚,即使是2013年的新产品发布版也仍然是这样。。。有点伤心!这似乎适用于4.1.3。该死。。。所以实际上只有4.1.2像这样令人讨厌!你的解决方案是什么?我在SFINAE和4.1.2中遇到了类似的问题。(另外,出于好奇,您为什么要使用4.1.2?Maya?)
Test.x = 100
int = 10