#include <array>
#include <iostream>
class Foo
{
public:
Foo(int){}
Foo(const Foo &) = delete;
Foo(Foo &&)
{
std::cout<<"Moved\n";
}
};
template<class... Type>
constexpr std::array<typename std::common_type<Type...>::type, sizeof...(Type)> make_array(Type&&... t)
{
return {std::forward<Type>(t)...};
}
int main() {
auto arr = make_array(Foo{1}, Foo{2});
return 0;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CgpjbGFzcyBGb28KewoJcHVibGljOgoJICAgIEZvbyhpbnQpe30KCQlGb28oY29uc3QgRm9vICYpID0gZGVsZXRlOwoJCQoJCQoJCUZvbyhGb28gJiYpCgkJewoJCQlzdGQ6OmNvdXQ8PCJNb3ZlZFxuIjsKCQl9Cn07Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBUeXBlPgpjb25zdGV4cHIgc3RkOjphcnJheTx0eXBlbmFtZSBzdGQ6OmNvbW1vbl90eXBlPFR5cGUuLi4+Ojp0eXBlLCBzaXplb2YuLi4oVHlwZSk+IG1ha2VfYXJyYXkoVHlwZSYmLi4uIHQpCnsKCXJldHVybiB7c3RkOjpmb3J3YXJkPFR5cGU+KHQpLi4ufTsKfQoKaW50IG1haW4oKSB7CglhdXRvIGFyciA9IG1ha2VfYXJyYXkoRm9vezF9LCBGb297Mn0pOwoJcmV0dXJuIDA7Cn0=