#pragma once namespace sp { namespace details { template using ArrayType = std::vector(void)>>; template struct ArrayFiller {}; template struct ArrayFiller> { static ArrayType ArrayCreate() { ArrayType array; array.reserve(sizeof...(TMessages)); ArrayFiller::ArrayAppend(array); return array; } }; template struct ArrayFiller { static void ArrayAppend(details::ArrayType& array) { ArrayFiller::ArrayAppend(array); ArrayFiller::ArrayAppend(array); } }; template struct ArrayFiller { static void ArrayAppend(details::ArrayType& array) { array.emplace_back([]() -> std::unique_ptr { return std::make_unique(); }); } }; } // namespace details } // namespace sp