【发布时间】:2012-05-16 13:53:42
【问题描述】:
我对使用 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 上工作,有什么想法吗?坦率地说,我不明白这两个编译器之间怎么会有这么大的区别!
或者,如果您有替代方案,那就太好了。有模板的东西!或者宏...
【问题讨论】:
-
GCC 4.1.2 于 2007 年 2 月 13 日 发布; 2011 中的 GCC 4.6.0。你怎么能不期待差异?
-
差别很大...我希望它被称为 5.X,而不是 4.6...也许这就是我。另外,我只是讨厌被 4.1.2 卡住,即使是 2013 年的新产品发布仍然是用它制作的……有点难过!
-
这似乎适用于 4.1.3。
-
该死的......所以真的只有4.1.2这样烦人!