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で動作するには、このようなものが必要です。何かアイデアはありますか?率直に言って、これら2つのコンパイラの間にこれほど大きな違いがあるのか​​わかりません。

または、それに代わるものがあれば、それは素晴らしいことです。テンプレートで何か!またはMACROS..。

4

1 に答える 1

0

私は実際に私の問題の一部を解決しました...

しかし、ここでのこの場合、そうであるべきであり、そうではtemplate<class T>ありませんtemplate<typename T>...

だから私自身にちょうど半分のハイファイブ。しかし、2番目の部分では、別のアプローチを使用しました。それを行うのは面倒でしたが、うまくいきました。

于 2012-05-16T18:18:51.683 に答える