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..。