#include <array>
#include <iostream>
#include <cstddef>
#include <cstdint>
 
//	This template will be instantiated repeatedly with VItems list
//	populated with new items.
template<typename TItem,  TItem... VItems> class
t_PackImpl
{
	//	This template will be selected for second and all other blocks.
	public: template<TItem... VInnerItems> using
	t_Pack = t_PackImpl
	<
		TItem
	//	add all previous items
	,	VItems...
	//	add item holding amount of items in new block
	,	TItem{static_cast<TItem>(sizeof...(VInnerItems))}
	//	add new block items
	,	VInnerItems...
	>;
 
	//	This method will be called on the last instantiated
	//	template with VItems containing all the items.
	//	Returns array containing all the items with extra 0 item at the end.
	public: static constexpr auto
	to_array(void) -> ::std::array<TItem, sizeof...(VItems) + ::std::size_t{1}>
	{
		return {VItems..., TItem{}};
	}
};
 
//	This template will be instantiated just once.
//	Starts t_PackImpl instantiation chain.
template<typename TItem> class
t_BeginPack
{
	//	This template will be selected for first block.
	public: template<TItem... VInnerItems> using
	t_Pack = t_PackImpl
	<
		TItem
	//	add item holding amount of items in new block
	,	TItem{static_cast<TItem>(sizeof...(VInnerItems))}
	//	add new block items
	,	VInnerItems...
	>;
};
 
int main()
{
	{
		constexpr auto items
		{
			t_BeginPack<::std::uint8_t>::t_Pack<42>::to_array()
		};
		for(auto const & item: items)
		{
			::std::cout << static_cast<::std::uint32_t>(item) << ::std::endl;
		}
	}
	::std::cout << "----------------" << ::std::endl;
	{
		constexpr auto items
		{
			t_BeginPack<::std::uint8_t>::t_Pack<0, 1, 2>::to_array()
		};
		for(auto const & item: items)
		{
			::std::cout << static_cast<::std::uint32_t>(item) << ::std::endl;
		}
	}
	::std::cout << "----------------" << ::std::endl;
	{
		constexpr auto items
		{
			t_BeginPack<::std::uint8_t>::
				t_Pack<0, 1, 2>::
				t_Pack<0, 1>::
				t_Pack<0, 1, 2, 3, 4, 5>::to_array()
		};
		for(auto const & item: items)
		{
			::std::cout << static_cast<::std::uint32_t>(item) << ::std::endl;
		}
	}
	return(0);
}
 
				I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjc3RkZGVmPgojaW5jbHVkZSA8Y3N0ZGludD4KCi8vCVRoaXMgdGVtcGxhdGUgd2lsbCBiZSBpbnN0YW50aWF0ZWQgcmVwZWF0ZWRseSB3aXRoIFZJdGVtcyBsaXN0Ci8vCXBvcHVsYXRlZCB3aXRoIG5ldyBpdGVtcy4KdGVtcGxhdGU8dHlwZW5hbWUgVEl0ZW0sICBUSXRlbS4uLiBWSXRlbXM+IGNsYXNzCnRfUGFja0ltcGwKewoJLy8JVGhpcyB0ZW1wbGF0ZSB3aWxsIGJlIHNlbGVjdGVkIGZvciBzZWNvbmQgYW5kIGFsbCBvdGhlciBibG9ja3MuCglwdWJsaWM6IHRlbXBsYXRlPFRJdGVtLi4uIFZJbm5lckl0ZW1zPiB1c2luZwoJdF9QYWNrID0gdF9QYWNrSW1wbAoJPAoJCVRJdGVtCgkvLwlhZGQgYWxsIHByZXZpb3VzIGl0ZW1zCgksCVZJdGVtcy4uLgoJLy8JYWRkIGl0ZW0gaG9sZGluZyBhbW91bnQgb2YgaXRlbXMgaW4gbmV3IGJsb2NrCgksCVRJdGVte3N0YXRpY19jYXN0PFRJdGVtPihzaXplb2YuLi4oVklubmVySXRlbXMpKX0KCS8vCWFkZCBuZXcgYmxvY2sgaXRlbXMKCSwJVklubmVySXRlbXMuLi4KCT47CgoJLy8JVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGxhc3QgaW5zdGFudGlhdGVkCgkvLwl0ZW1wbGF0ZSB3aXRoIFZJdGVtcyBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMuCgkvLwlSZXR1cm5zIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyB3aXRoIGV4dHJhIDAgaXRlbSBhdCB0aGUgZW5kLgoJcHVibGljOiBzdGF0aWMgY29uc3RleHByIGF1dG8KCXRvX2FycmF5KHZvaWQpIC0+IDo6c3RkOjphcnJheTxUSXRlbSwgc2l6ZW9mLi4uKFZJdGVtcykgKyA6OnN0ZDo6c2l6ZV90ezF9PgoJewoJCXJldHVybiB7Vkl0ZW1zLi4uLCBUSXRlbXt9fTsKCX0KfTsKCi8vCVRoaXMgdGVtcGxhdGUgd2lsbCBiZSBpbnN0YW50aWF0ZWQganVzdCBvbmNlLgovLwlTdGFydHMgdF9QYWNrSW1wbCBpbnN0YW50aWF0aW9uIGNoYWluLgp0ZW1wbGF0ZTx0eXBlbmFtZSBUSXRlbT4gY2xhc3MKdF9CZWdpblBhY2sKewoJLy8JVGhpcyB0ZW1wbGF0ZSB3aWxsIGJlIHNlbGVjdGVkIGZvciBmaXJzdCBibG9jay4KCXB1YmxpYzogdGVtcGxhdGU8VEl0ZW0uLi4gVklubmVySXRlbXM+IHVzaW5nCgl0X1BhY2sgPSB0X1BhY2tJbXBsCgk8CgkJVEl0ZW0KCS8vCWFkZCBpdGVtIGhvbGRpbmcgYW1vdW50IG9mIGl0ZW1zIGluIG5ldyBibG9jawoJLAlUSXRlbXtzdGF0aWNfY2FzdDxUSXRlbT4oc2l6ZW9mLi4uKFZJbm5lckl0ZW1zKSl9CgkvLwlhZGQgbmV3IGJsb2NrIGl0ZW1zCgksCVZJbm5lckl0ZW1zLi4uCgk+Owp9OwoKaW50IG1haW4oKQp7Cgl7CgkJY29uc3RleHByIGF1dG8gaXRlbXMKCQl7CgkJCXRfQmVnaW5QYWNrPDo6c3RkOjp1aW50OF90Pjo6dF9QYWNrPDQyPjo6dG9fYXJyYXkoKQoJCX07CgkJZm9yKGF1dG8gY29uc3QgJiBpdGVtOiBpdGVtcykKCQl7CgkJCTo6c3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PDo6c3RkOjp1aW50MzJfdD4oaXRlbSkgPDwgOjpzdGQ6OmVuZGw7CgkJfQoJfQoJOjpzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0iIDw8IDo6c3RkOjplbmRsOwoJewoJCWNvbnN0ZXhwciBhdXRvIGl0ZW1zCgkJewoJCQl0X0JlZ2luUGFjazw6OnN0ZDo6dWludDhfdD46OnRfUGFjazwwLCAxLCAyPjo6dG9fYXJyYXkoKQoJCX07CgkJZm9yKGF1dG8gY29uc3QgJiBpdGVtOiBpdGVtcykKCQl7CgkJCTo6c3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PDo6c3RkOjp1aW50MzJfdD4oaXRlbSkgPDwgOjpzdGQ6OmVuZGw7CgkJfQoJfQoJOjpzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0iIDw8IDo6c3RkOjplbmRsOwoJewoJCWNvbnN0ZXhwciBhdXRvIGl0ZW1zCgkJewoJCQl0X0JlZ2luUGFjazw6OnN0ZDo6dWludDhfdD46OgoJCQkJdF9QYWNrPDAsIDEsIDI+OjoKCQkJCXRfUGFjazwwLCAxPjo6CgkJCQl0X1BhY2s8MCwgMSwgMiwgMywgNCwgNT46OnRvX2FycmF5KCkKCQl9OwoJCWZvcihhdXRvIGNvbnN0ICYgaXRlbTogaXRlbXMpCgkJewoJCQk6OnN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDMyX3Q+KGl0ZW0pIDw8IDo6c3RkOjplbmRsOwoJCX0KCX0KCXJldHVybigwKTsKfQo=