Я реализовал простую программу на C ++ 17, в которой я пытаюсь вызвать базовый класс operator=
из производного класса, используя расширение параметров.Но программа не компилируется.
#include "pch.h"
#include <iostream>
class D
{
public:
D()
{
std::cout << "D ctror" << std::endl;
}
D & operator = (const D & other)
{
return *this;
}
};
class C
{
public:
C()
{
std::cout << "C ctror" << std::endl;
}
C & operator = (const C & other)
{
return *this;
}
};
class B
{
public:
B()
{
std::cout << "B ctror" << std::endl;
}
B & operator = (const B & other)
{
std::cout << "operator B" << std::endl;
return *this;
}
};
template<typename... Ts> class A: public Ts...
{
public:
A(): Ts()...
{
}
A & operator = (const A & other)
{
Ts::operator =(other);
return *this;
}
};
int main()
{
A<B,C,D> a1;
A<B,C,D> a2;
a1 = a2;
}
В качестве набора инструментов используется Visual Studio 2017 (v141)
Сгенерирована следующая ошибка
C3520: '=': пакет параметров должен быть расширен в этой контекстной заметке: при компиляции функции-члена шаблона класса' A & A :: operator = (const A &) 'примечание: см. ссылку на создание экземпляра шаблона функции' A & A :: operator = (const A &) 'компилируемое примечание: см. ссылку на экземпляр шаблона класса' A ', который компилируется