sfinae for g ++ 4.1.2

时间:2012-05-16 13:53:42

标签: gcc g++ sfinae typename

我的SFINAE与G ++ 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,任何想法?坦率地说,我不明白这两个编译器之间会有多大差异!

或者如果你有替代品,那就太好了。有模板的东西!或MACROS ......

1 个答案:

答案 0 :(得分:0)

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

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

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