#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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgojaW5jbHVkZSA8dXRpbGl0eT4KCnN0cnVjdCBBIHsKCXZvaWQgb3BlcmF0b3I9KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+IGEpe3ByaW50ZigiaW50WyV6dV06IixhLnNpemUoKSk7Zm9yIChhdXRvIHg6YSkgcHJpbnRmKCIgJWQiLHgpOyBwcmludGYoIlxuIik7fQoJdm9pZCBvcGVyYXRvcj0oZmxvYXQgYSl7cHJpbnRmKCJmbG9hdDogJS4xZlxuIixhKTt9Cn07CgpzdHJ1Y3QgQiA6IEEgewoJdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cgl2b2lkIF9jb3B5KFQmJiB4KQoJewoJCUE6Om9wZXJhdG9yPSh4KTsKCQlwcmludGYoIisgXG4iKTsKCX0KCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCXZvaWQgb3BlcmF0b3I9KFQgeCkgewoJCV9jb3B5KHN0ZDo6Zm9yd2FyZDxUPih4KSk7Cgl9CgoJdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cgl2b2lkIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4geCkgewoJCV9jb3B5KHgpOwoJfQp9OwoKaW50IG1haW4oKSB7CgoJQSBhOwoJYT17MSwyLDV9OwoJYT01LjY7CgoJQiBiOwoJYj17MSw1LDZ9OwoJYj00Ljc7Cgp9Cg==