2012-05-16 30 views
0

我在使用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工作,任何想法?坦率地說,我不明白這兩個編譯器之間可能會有如此多的區別!

或者,如果您有替代方案,那就太好了。與模板的東西!或宏...

+1

GCC 4.1.2於2007年2月13日發佈**; GCC 4.6.0在** 2011 **。你怎麼會不期望差異? – Mat

+0

有太多的不同...我期望它被稱爲5.X,而不是4.6 ...也許這只是我。另外,我只是討厭被4.1.2卡住,即使2013年的新產品發佈仍然是這樣做的......這有點難過! – widgg

+0

這似乎與** 4.1.3 **一起工作。 –

回答

0

其實我解決我的問題的一部分...

但這種情況下在這裏,它應該是template<class T>,而不是template<typename T> ...

所以只是一個半HI-五對我自己。但是對於第二部分,我使用了另一種方法,它很煩人,但它工作。

+0

你的解決方案是什麼?我遇到了與SFINAE和4.1.2類似的問題。 (另外,出於好奇,你爲什麼使用4.1.2?Maya?) –

+0

是的Maya!和XSI! – widgg