Явное создание экземпляра вариационного конструктора: идентификатор шаблона не соответствует ни одному объявлению шаблона.

Я пытаюсь явно создать экземпляр variadic конструктор. Этот минимальный пример для распечатать все arguments вызывает ту же ошибку, которую я вижу на MinGW-w64 на 64-битной Win 7 с GCC 5.3.

struct stf {
 template<typename... Args> stf(Args&&... args){
  using expand_type = int[];
  expand_type{(print(args), 0)... };
 }
};

//error on next line:
//template-id 'stf<char*, char*>' for 'stf::stf(char*, char*)'
//does not match any template declaration
template stf::stf<char*,char*>(char*,char*);

person Community    schedule 29.12.2016    source источник


Ответы (1)


Давайте на мгновение проигнорируем пакет параметров:

template<typename Arg> stf(Arg &&args)

Популярная викторина: какой экземпляр соответствует приведенному выше шаблону. Это:

template<char *> stf(char *);

or

template<char *> stf(char *&&);

?

Если вы замените char * везде, где тип шаблона появляется в шаблоне, вы, очевидно, получите вторую версию в качестве правильного ответа.

Следовательно, правильное создание экземпляра шаблона должно быть:

template stf::stf<char*,char*>(char* &&,char* &&);
person Sam Varshavchik    schedule 29.12.2016