#include <iostream>
#include <array>
#include <type_traits>
#include <utility>
using namespace std;
namespace detail
{
template <typename T, std::size_t...Is>
std::array<T, sizeof...(Is)> make_array(const T& value, std::index_sequence<Is...>)
{
return {{(static_cast<void>(Is), value)...}};
}
}
template <std::size_t N, typename T>
std::array<T, N> make_array(const T& value)
{
return detail::make_array(value, std::make_index_sequence<N>());
}
struct X {
X() {}
X(int) {}
int x;
};
struct Y : public X {};
struct Q {
Q(): m_(make_array<2, X>(0)) {}
Q(X x, Y y) : m_{x, y} {}
std::array<X, 2> m_;
};
struct Z : public std::add_const<X>::type {
};
int main() {
Z z;
z.x = 0;
X x;
Y y;
Q q(x, y);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPHV0aWxpdHk+CgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm5hbWVzcGFjZSBkZXRhaWwKewoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdC4uLklzPgogICAgc3RkOjphcnJheTxULCBzaXplb2YuLi4oSXMpPiBtYWtlX2FycmF5KGNvbnN0IFQmIHZhbHVlLCBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKICAgIHsKICAgICAgICByZXR1cm4ge3soc3RhdGljX2Nhc3Q8dm9pZD4oSXMpLCB2YWx1ZSkuLi59fTsKICAgIH0KfQoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4sIHR5cGVuYW1lIFQ+CnN0ZDo6YXJyYXk8VCwgTj4gbWFrZV9hcnJheShjb25zdCBUJiB2YWx1ZSkKewogICAgcmV0dXJuIGRldGFpbDo6bWFrZV9hcnJheSh2YWx1ZSwgc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+KCkpOwp9CgpzdHJ1Y3QgWCB7CiAgICBYKCkge30KICAgIFgoaW50KSB7fQogICAgaW50IHg7Cn07CgpzdHJ1Y3QgWSA6IHB1YmxpYyBYIHt9OwoKc3RydWN0IFEgewoJCiAgICBRKCk6IG1fKG1ha2VfYXJyYXk8MiwgWD4oMCkpIHt9CiAgICAKICAgIFEoWCB4LCBZIHkpIDogbV97eCwgeX0ge30KICAgIAogICAgc3RkOjphcnJheTxYLCAyPiBtXzsKfTsKCnN0cnVjdCBaIDogcHVibGljIHN0ZDo6YWRkX2NvbnN0PFg+Ojp0eXBlIHsKfTsKCmludCBtYWluKCkgewogICAgCiAgICBaIHo7CiAgICB6LnggPSAwOwogICAgCiAgICBYIHg7CiAgICBZIHk7CiAgICAKICAgIFEgcSh4LCB5KTsKICAgIAoJcmV0dXJuIDA7Cn0KCg==