我的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 ......
答案 0 :(得分:0)
我实际上解决了我的一部分问题......
但是对于这种情况,它应该是template<class T>
而不是template<typename T>
...
所以对我自己只有一半的Hi-Five。但是对于第二部分,我使用了另一种方法,这很烦人,但它确实有效。