Шаблон параметра переменной - скомпилированная ошибка - PullRequest
0 голосов
/ 06 марта 2019

Код скомпилирован и хорошо работает на vs2015, но не может быть скомпилирован и сообщает об ошибке на gcc / g ++ 7.4.0 следующим образом: gcc версии 7.4.0 ошибка

#include <iostream>
#include <memory>
class AA
{
public:
  template<typename R, typename... Args>
  R invoke(Args... args)
  {
   std::cout<< __FUNCTION__ << ":" << sizeof...(args) << std::endl;
   return R();
  }
  template<typename R, typename... Args>
  R call(Args... args)
  {
    return this->invoke<R, Args...>(args...);
  }
};
template<typename T>
class BB
{
public:
 BB(): lib(new T()){}
 std::shared_ptr<T> lib;
};
template<typename T, typename... Args>
BB<T> make_module(Args... args)
{
   BB<T> obj;
   obj.lib->call<T, Args...>(args...);
   return obj;
}
int main()
{
  BB<AA> obj = make_module<AA>(1, 2, 3);
  return 0;
}

1 Ответ

0 голосов
/ 06 марта 2019

Вы вызываете шаблон функции-члена call для объекта, который зависит от параметра шаблона T - BB<T> obj;вам нужно использовать template , чтобы указать, что call является шаблоном функции-члена:

Заменить

   obj.lib->call<T, Args...>(args...);

на

   obj.lib->template call<T, Args...>(args...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...