ошибка: невозможно добавить аргумент шаблона по умолчанию к определению члена шаблона класса - PullRequest
0 голосов
/ 06 февраля 2020

Когда я компилирую следующую программу, используя c ++ 11, я получаю ошибку error: cannot add a default template argument to the definition of a member of a class template. Почему компилятор не позволяет использовать аргумент шаблона по умолчанию в определении функции-члена?

#include <iostream>

template<typename A, typename T = int>
class my_class
{
private:
  void dosomething();
};

template<typename A, typename T = int>
void my_class<A, T>::dosomething()
{

}

int main( ) 
{ 
  B<int> obj;

  return 0;
}

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

С [temp.param]/9 (выделено жирным шрифтом для меня)

Аргумент шаблона по умолчанию - это аргумент шаблона (17.3), указанный после = в параметре шаблона , Шаблонный аргумент по умолчанию может быть указан для любого типа параметра шаблона (тип, не тип, шаблон), который не является пакетом параметров шаблона (17.5.3). Шаблонный аргумент по умолчанию может быть указан в объявлении шаблона. Параметр шаблона по умолчанию не должен указываться в списках параметров шаблона определения члена шаблона класса, который появляется за пределами класса члена. Параметр шаблона по умолчанию не должен указываться в объявление шаблона класса друга. Если в объявлении шаблона функции-друга указан шаблон-аргумент по умолчанию, это объявление должно быть определением и должно быть единственным объявлением шаблона функции в модуле перевода.

1 голос
/ 06 февраля 2020

Снимите int с определения функции. ie template<typename A, typename T = int> становится template<typename A, typename T>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...