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の回答を見てください。これははるかに単純で、おそらくこの問題を引き起こしません。


Microsoftはバグレポートを更新して、修正を見つけたと述べました。

于 2011-07-04T16:54:09.833 に答える