【问题标题】:sfinae for g++ 4.1.2sfinae for g++ 4.1.2
【发布时间】: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这样烦人!

标签: gcc g++ sfinae typename


【解决方案1】:

我实际上解决了我的部分问题......

但是对于这里的这种情况,应该是template&lt;class T&gt; 而不是template&lt;typename T&gt;...

所以对我自己来说只有半个 Hi-5。但是对于第二部分,我使用了另一种方法,这样做很烦人,但确实有效。

【讨论】:

  • 您的解决方案是什么?我在 SFINAE 和 4.1.2 中遇到了类似的问题。 (另外,出于好奇,您为什么使用 4.1.2?Maya?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多