我对使用 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 上工作,有什么想法吗?坦率地说,我不明白这两个编译器之间怎么会有这么大的区别!
或者,如果您有替代方案,那就太好了。有模板的东西!或者宏...