Наследовать от класса шаблона и используя наследовать его конструктор

Я хочу наследовать шаблонный класс и использовать "using" для наследования его конструктора. Но когда я вызываю конструктор перемещения, происходит сбой в "нет соответствующего конструктора"

#include <iostream>

template <typename ARG>
class TBase {
 public:
  TBase() {}
  TBase(TBase<ARG>&& t) {}

 private:
  ARG arg;
};

class Int : public TBase<int> {
 public:
  using TBase<int>::TBase;
};

int main() {
  TBase<int> t1;
  Int t2(std::move(t1));
  return 0;
}

результат сборки

 In function 'int main()':
20:23: error: no matching function for call to 'Int::Int(std::remove_reference<TBase<int>&>::type)'
20:23: note: candidates are:
13:7: note: Int::Int()
13:7: note:   candidate expects 0 arguments, 1 provided
13:7: note: Int::Int(Int&&)
13:7: note:   no known conversion for argument 1 from 'std::remove_reference<TBase<int>&>::type {aka TBase<int>}' to 'Int&&'

1 ответ

Ну, проблема проста для объяснения:

Default-, Copy- и Movectors являются специальными. Они не наследуются наследующими ctors. Подробнее о наследовании конструкторов читайте здесь.

Итак, напишите свой собственный ctor, принимающий экземпляр baseclass. Не должно быть слишком сложно, так как вы пытаетесь просто наследовать ctors.

Другие вопросы по тегам