#include <stdio.h>
#include <initializer_list>
#include <utility>

struct A {
	void operator=(std::initializer_list<int> a){printf("int[%zu]:",a.size());for (auto x:a) printf(" %d",x); printf("\n");}
	void operator=(float a){printf("float: %.1f\n",a);}
};

struct B : A {
	template <typename T>
	void _copy(T&& x)
	{
		A::operator=(x);
		printf("+ \n");
	}

	template <typename T>
	void operator=(T x) {
		_copy(std::forward<T>(x));
	}

	template <typename T>
	void operator=(std::initializer_list<T> x) {
		_copy(x);
	}
};

int main() {

	A a;
	a={1,2,5};
	a=5.6;

	B b;
	b={1,5,6};
	b=4.7;

}
