0

我对使用 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));
}

自然地,输出是:

Test.x = 100
int = 10

我需要类似的东西才能在 g++ 4.1.2 上工作,有什么想法吗?坦率地说,我不明白这两个编译器之间怎么会有这么大的区别!

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

4

1 回答 1

0

我实际上解决了我的部分问题......

但是对于这里的这种情况,它应该是template<class T>而不是template<typename T>......

所以对我自己来说只有半个 Hi-5。但是对于第二部分,我使用了另一种方法,这样做很烦人,但它确实有效。

于 2012-05-16T18:18:51.683 回答