@@ -753,11 +753,14 @@ auto makeEmptyTable()
753753 return b.finalize ();
754754}
755755
756- template <typename ... Cs>
757- auto makeEmptyTable (const char * name, framework::pack<Cs...> p)
756+ template <typename P>
757+ concept PackLike = requires (P &p) { o2::framework::pack_size (p); };
758+
759+ template <PackLike P>
760+ auto makeEmptyTable (const char * name)
758761{
759762 TableBuilder b;
760- [[maybe_unused]] auto writer = b.cursor (p );
763+ [[maybe_unused]] auto writer = b.cursor (P{} );
761764 b.setLabel (name);
762765 return b.finalize ();
763766}
@@ -773,7 +776,7 @@ auto spawner(std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* na
773776 using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
774777 auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
775778 if (fullTable->num_rows () == 0 ) {
776- return makeEmptyTable (name, placeholders_pack_t {} );
779+ return makeEmptyTable< placeholders_pack_t > (name);
777780 }
778781 static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
779782
@@ -786,7 +789,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, o
786789{
787790 using placeholders_pack_t = typename o2::aod::MetadataTrait<D>::metadata::placeholders_pack_t ;
788791 if (fullTable->num_rows () == 0 ) {
789- return makeEmptyTable (name, placeholders_pack_t {} );
792+ return makeEmptyTable< placeholders_pack_t > (name);
790793 }
791794 static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (placeholders_pack_t {}));
792795
@@ -800,7 +803,7 @@ auto spawner(std::vector<std::shared_ptr<arrow::Table>>&& tables, const char* na
800803 using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
801804 auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
802805 if (fullTable->num_rows () == 0 ) {
803- return makeEmptyTable (name, expression_pack_t {} );
806+ return makeEmptyTable< expression_pack_t > (name);
804807 }
805808 static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
806809
@@ -819,7 +822,7 @@ auto spawner(std::shared_ptr<arrow::Table> const& fullTable, const char* name, s
819822{
820823 using expression_pack_t = typename o2::aod::MetadataTrait<D>::metadata::expression_pack_t ;
821824 if (fullTable->num_rows () == 0 ) {
822- return makeEmptyTable (name, expression_pack_t {} );
825+ return makeEmptyTable< expression_pack_t > (name);
823826 }
824827 static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (expression_pack_t {}));
825828 auto projectors = []<typename ... C>(framework::pack<C...>) -> std::array<expressions::Projector, sizeof ...(C)>
@@ -836,7 +839,7 @@ auto spawner(framework::pack<C...> columns, std::vector<std::shared_ptr<arrow::T
836839{
837840 auto fullTable = soa::ArrowHelpers::joinTables (std::move (tables));
838841 if (fullTable->num_rows () == 0 ) {
839- return makeEmptyTable (name, framework::pack<C...>{} );
842+ return makeEmptyTable< decltype (columns)>(name );
840843 }
841844 static auto new_schema = std::make_shared<arrow::Schema>(o2::soa::createFieldsFromColumns (columns));
842845 std::array<expressions::Projector, sizeof ...(C)> projectors{{std::move (C::Projector ())...}};
0 commit comments