Gcc g+的sfinae+;4.1.2
我对使用G++4.1.2的SFINAE有一个问题 以下代码适用于4.6: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
#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