1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <tuple> #include <iostream> template<int I> struct int_ {}; template<const char*& Lit> struct lit {}; template<typename T, typename... Initializers> struct array { static const T data[sizeof...(Initializers)]; private: template<typename Initializer> struct get; }; template<typename T, typename... Inits> template<const char*& Lit> struct array<T, Inits...>::get<lit<Lit>> { constexpr static const char* make() { return Lit; } }; template<typename T, typename... Inits> template<int N> struct array<T, Inits...>::get<int_<N>> { constexpr static int make() { return N; } }; template<typename T, typename... Inits> template<typename... Recurse> struct array<T, Inits...>::get<std::tuple<Recurse...>> { /* can't be constexpr unless T(subinitializers...) is */ static T make() { return T { get<Recurse>::make()... }; } }; template<typename T, typename... Initializers> const T array<T, Initializers...>::data[sizeof...(Initializers)] = { { get<Initializers>::make() }... }; class custom { public: custom(int i, int j, const char* s) : i(i), j(j), s(s) {} friend std::ostream& operator<<(std::ostream& os, custom const& c) { return os << "{ " << c.i << ", " << c.j << ", " << c.s << " }"; }; private: int i, j; std::string s; }; namespace { const char* hello = "Hello"; const char* world = "World!"; }; int main() { typedef array<custom, std::tuple< int_<1>, int_<3>, lit<hello> >, std::tuple< int_<2>, int_<4>, lit<world> > > array; const int size = sizeof array::data / sizeof *array::data; for(int i = 0; i != size; ++i) { std::cout << array::data[i] << '\n'; } } |
I2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZTxpbnQgST4Kc3RydWN0IGludF8ge307Cgp0ZW1wbGF0ZTxjb25zdCBjaGFyKiYgTGl0PgpzdHJ1Y3QgbGl0IHt9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gSW5pdGlhbGl6ZXJzPgpzdHJ1Y3QgYXJyYXkgewogICAgc3RhdGljIGNvbnN0IFQgZGF0YVtzaXplb2YuLi4oSW5pdGlhbGl6ZXJzKV07Cgpwcml2YXRlOgogICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5pdGlhbGl6ZXI+CiAgICBzdHJ1Y3QgZ2V0Owp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gSW5pdHM+CnRlbXBsYXRlPGNvbnN0IGNoYXIqJiBMaXQ+CnN0cnVjdCBhcnJheTxULCBJbml0cy4uLj46OmdldDxsaXQ8TGl0Pj4gewogICAgY29uc3RleHByCiAgICBzdGF0aWMgY29uc3QgY2hhcioKICAgIG1ha2UoKQogICAgeyByZXR1cm4gTGl0OyB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBJbml0cz4KdGVtcGxhdGU8aW50IE4+CnN0cnVjdCBhcnJheTxULCBJbml0cy4uLj46OmdldDxpbnRfPE4+PiB7CiAgICBjb25zdGV4cHIKICAgIHN0YXRpYyBpbnQKICAgIG1ha2UoKQogICAgeyByZXR1cm4gTjsgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gSW5pdHM+CnRlbXBsYXRlPHR5cGVuYW1lLi4uIFJlY3Vyc2U+CnN0cnVjdCBhcnJheTxULCBJbml0cy4uLj46OmdldDxzdGQ6OnR1cGxlPFJlY3Vyc2UuLi4+PiB7CiAgICAvKiBjYW4ndCBiZSBjb25zdGV4cHIgdW5sZXNzIFQoc3ViaW5pdGlhbGl6ZXJzLi4uKSBpcyAqLwogICAgc3RhdGljIFQKICAgIG1ha2UoKQogICAgeyByZXR1cm4gVCB7IGdldDxSZWN1cnNlPjo6bWFrZSgpLi4uIH07IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEluaXRpYWxpemVycz4KY29uc3QgVCBhcnJheTxULCBJbml0aWFsaXplcnMuLi4+OjpkYXRhW3NpemVvZi4uLihJbml0aWFsaXplcnMpXSA9IHsgeyBnZXQ8SW5pdGlhbGl6ZXJzPjo6bWFrZSgpIH0uLi4gfTsKCmNsYXNzIGN1c3RvbSB7CnB1YmxpYzoKICAgIGN1c3RvbShpbnQgaSwgaW50IGosIGNvbnN0IGNoYXIqIHMpCiAgICA6IGkoaSksIGooaiksIHMocykKICAgIHt9CgogICAgZnJpZW5kCiAgICBzdGQ6Om9zdHJlYW0mCiAgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGN1c3RvbSBjb25zdCYgYykKICAgIHsKICAgICAgICByZXR1cm4gb3MKICAgICAgICAgICAgPDwgInsgIiA8PCBjLmkKICAgICAgICAgICAgPDwgIiwgIiA8PCBjLmoKICAgICAgICAgICAgPDwgIiwgIiA8PCBjLnMKICAgICAgICAgICAgPDwgIiB9IjsKICAgIH07Cgpwcml2YXRlOgogICAgaW50IGksIGo7CiAgICBzdGQ6OnN0cmluZyBzOwp9OwoKbmFtZXNwYWNlIHsKCmNvbnN0IGNoYXIqIGhlbGxvID0gIkhlbGxvIjsKY29uc3QgY2hhciogd29ybGQgPSAiV29ybGQhIjsKCn07CgppbnQKbWFpbigpIHsKICAgIHR5cGVkZWYgYXJyYXk8Y3VzdG9tLAogICAgICAgIHN0ZDo6dHVwbGU8IGludF88MT4sIGludF88Mz4sIGxpdDxoZWxsbz4gPiwKICAgICAgICBzdGQ6OnR1cGxlPCBpbnRfPDI+LCBpbnRfPDQ+LCBsaXQ8d29ybGQ+ID4KICAgID4gYXJyYXk7CiAgICBjb25zdCBpbnQgc2l6ZSA9IHNpemVvZiBhcnJheTo6ZGF0YSAvIHNpemVvZiAqYXJyYXk6OmRhdGE7CiAgICBmb3IoaW50IGkgPSAwOyBpICE9IHNpemU7ICsraSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBhcnJheTo6ZGF0YVtpXSA8PCAnXG4nOwogICAgfQp9
-
upload with new input
-
result: Success time: 0s memory: 2960 kB returned value: 0
{ 1, 3, Hello } { 2, 4, World! }


