gcc汇编,视觉工作室不?

时间:2014-09-21 09:00:40

标签: c++ visual-studio visual-studio-2012 gcc

所以,我减少了一些代码:

#include <iostream>
#include <functional>

using namespace std;

struct Test {
    template <class T>
    void operator()() {
        cout << typeid(T).name() << endl;
    }
    template <class T>
    void f() {
        cout << typeid(T).name() << endl;
    }
};

template <typename S, typename T, typename T1>
mem_fun_ref_t<S, T> make_mem_fun_ref()
{
    return mem_fun_ref(&T::template operator()<T1>); //A
    //return mem_fun_ref(&T::template f<T1> ); //B
}

int main(int argc, char *argv[]) {
    Test t;
    make_mem_fun_ref<void, Test, int>()(t);
}

这在gcc下编译得很好,但VS2013抱怨:“错误C2902:'运算符':'模板'后面的意外标记,预期标识符”。

现在,如果我评论A行并使用B行,VS就不再抱怨了。

这是与operator()解释template关键字有关的错误吗? 我应该更改语法还是启用一些魔术标志/编译指示来编译A行?

BTW:我需要一个mem_fun_ref_t,它引用某个仿函数的模板化成员operator()。在任何人建议之前,我不能使用任何C ++ 11或Boost代码。

由于

0 个答案:

没有答案