1

我正在使用视觉工作室,我已经尝试了所有我能想到的东西。但不知道为什么这段代码会产生错误,这是我的代码:

template <class A,class B> B returnArgtype(void (A::*)(B)) {return *new B;}

struct test
{
    void function(int);
    decltype(returnArgtype(&test::function)) x;
};

它会产生这个错误:

error C2784: 'A returnArgtype(void (__thiscall A::* )(B))' : could not deduce template argument for 'void (__thiscall A::* )(B)' from 'void (int)'

我想知道当参数 x 在函数内部初始化时它不会产生该错误,如下所示:

struct test
{
    void function(int)
    {
        decltype(returnArgtype(&test::function)) x;
    }
};
4

2 回答 2

2

这对我有用(GCC 4.6,-std=c++0x):

template <class A, class B> B returnArgtype(void (A::*)(B));

struct test
{
  void function(int);
  decltype(returnArgtype(&test::function)) x;
};
于 2011-07-04T16:23:21.590 回答
1

这是我在您的其他问题上链接到的相同错误(请对其进行投票以使其更有可能 MS 会花时间修复它):

C++ 编译器在模板推导过程中失去了指向成员函数的指针的成员性,导致 ICE

然后,看看@Ise Wistera 的答案,它更简单,可能不会导致这个问题。


微软更新了错误报告,表示他们已经找到了解决办法。

于 2011-07-04T16:54:09.833 回答