почему компилятор не может вывести аргумент шаблона в моем коде? - PullRequest
1 голос
/ 04 июля 2011

Я использую Visual Studio и перепробовал все, что мог придумать.но не знаю, почему этот фрагмент кода генерирует ошибку, это мой код:

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;
    }
};

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Это работает для меня (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;
};
1 голос
/ 04 июля 2011

Это та же ошибка, с которой я связался по вашему другому вопросу (пожалуйста, подпишите ее, чтобы повысить вероятность того, что MS потратит время на ее исправление):

Компилятор C ++ теряет членство в указателе.to-member-function во время вывода шаблона, вызывает ICE

Затем посмотрите на @ ответ Ise Wistera , который намного проще и, вероятно, не вызывает этой проблемы.


Microsoft обновила отчет об ошибках, сообщив, что они нашли исправление.

...