我在使用G ++ 4.1.2時遇到了SFINAE問題。g ++的sfinae 4.1.2
下面的代碼工作正常爲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));
}
當然,輸出是:
Test.x = 100
int = 10
我需要像這種對G ++ 4.1.2工作,任何想法?坦率地說,我不明白這兩個編譯器之間可能會有如此多的區別!
或者,如果您有替代方案,那就太好了。與模板的東西!或宏...
GCC 4.1.2於2007年2月13日發佈**; GCC 4.6.0在** 2011 **。你怎麼會不期望差異? – Mat
有太多的不同...我期望它被稱爲5.X,而不是4.6 ...也許這只是我。另外,我只是討厭被4.1.2卡住,即使2013年的新產品發佈仍然是這樣做的......這有點難過! – widgg
這似乎與** 4.1.3 **一起工作。 –