diff --git a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelCommandGroupTest.cpp b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelCommandGroupTest.cpp index 28d498c808..ff5384c8f9 100644 --- a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelCommandGroupTest.cpp +++ b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelCommandGroupTest.cpp @@ -20,7 +20,7 @@ TEST_F(ParallelCommandGroupTest, ParallelGroupSchedule) { MockCommand* command1 = command1Holder.get(); MockCommand* command2 = command2Holder.get(); - ParallelCommandGroup group(tcb::make_vector>( + ParallelCommandGroup group(make_vector>( std::move(command1Holder), std::move(command2Holder))); EXPECT_CALL(*command1, Initialize()); @@ -50,7 +50,7 @@ TEST_F(ParallelCommandGroupTest, ParallelGroupInterrupt) { MockCommand* command1 = command1Holder.get(); MockCommand* command2 = command2Holder.get(); - ParallelCommandGroup group(tcb::make_vector>( + ParallelCommandGroup group(make_vector>( std::move(command1Holder), std::move(command2Holder))); EXPECT_CALL(*command1, Initialize()); diff --git a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelDeadlineGroupTest.cpp b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelDeadlineGroupTest.cpp index 4abab336f2..f35bd000c2 100644 --- a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelDeadlineGroupTest.cpp +++ b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelDeadlineGroupTest.cpp @@ -24,8 +24,8 @@ TEST_F(ParallelDeadlineGroupTest, DeadlineGroupSchedule) { ParallelDeadlineGroup group( std::move(command1Holder), - tcb::make_vector>(std::move(command2Holder), - std::move(command3Holder))); + make_vector>(std::move(command2Holder), + std::move(command3Holder))); EXPECT_CALL(*command1, Initialize()); EXPECT_CALL(*command1, Execute()).Times(2); @@ -64,8 +64,8 @@ TEST_F(ParallelDeadlineGroupTest, SequentialGroupInterrupt) { ParallelDeadlineGroup group( std::move(command1Holder), - tcb::make_vector>(std::move(command2Holder), - std::move(command3Holder))); + make_vector>(std::move(command2Holder), + std::move(command3Holder))); EXPECT_CALL(*command1, Initialize()); EXPECT_CALL(*command1, Execute()).Times(1); diff --git a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelRaceGroupTest.cpp b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelRaceGroupTest.cpp index 3df2147da8..be18fc3049 100644 --- a/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelRaceGroupTest.cpp +++ b/wpilibNewCommands/src/test/native/cpp/frc2/command/ParallelRaceGroupTest.cpp @@ -23,7 +23,7 @@ TEST_F(ParallelRaceGroupTest, ParallelRaceSchedule) { MockCommand* command2 = command2Holder.get(); MockCommand* command3 = command3Holder.get(); - ParallelRaceGroup group{tcb::make_vector>( + ParallelRaceGroup group{make_vector>( std::move(command1Holder), std::move(command2Holder), std::move(command3Holder))}; @@ -59,7 +59,7 @@ TEST_F(ParallelRaceGroupTest, ParallelRaceInterrupt) { MockCommand* command2 = command2Holder.get(); MockCommand* command3 = command3Holder.get(); - ParallelRaceGroup group{tcb::make_vector>( + ParallelRaceGroup group{make_vector>( std::move(command1Holder), std::move(command2Holder), std::move(command3Holder))}; @@ -164,7 +164,7 @@ TEST_F(ParallelRaceGroupTest, ParallelRaceScheduleTwice) { MockCommand* command2 = command2Holder.get(); MockCommand* command3 = command3Holder.get(); - ParallelRaceGroup group{tcb::make_vector>( + ParallelRaceGroup group{make_vector>( std::move(command1Holder), std::move(command2Holder), std::move(command3Holder))}; diff --git a/wpilibNewCommands/src/test/native/cpp/frc2/command/SequentialCommandGroupTest.cpp b/wpilibNewCommands/src/test/native/cpp/frc2/command/SequentialCommandGroupTest.cpp index 0048b2416c..e1283136e8 100644 --- a/wpilibNewCommands/src/test/native/cpp/frc2/command/SequentialCommandGroupTest.cpp +++ b/wpilibNewCommands/src/test/native/cpp/frc2/command/SequentialCommandGroupTest.cpp @@ -22,7 +22,7 @@ TEST_F(SequentialCommandGroupTest, SequentialGroupSchedule) { MockCommand* command2 = command2Holder.get(); MockCommand* command3 = command3Holder.get(); - SequentialCommandGroup group{tcb::make_vector>( + SequentialCommandGroup group{make_vector>( std::move(command1Holder), std::move(command2Holder), std::move(command3Holder))}; @@ -61,7 +61,7 @@ TEST_F(SequentialCommandGroupTest, SequentialGroupInterrupt) { MockCommand* command2 = command2Holder.get(); MockCommand* command3 = command3Holder.get(); - SequentialCommandGroup group{tcb::make_vector>( + SequentialCommandGroup group{make_vector>( std::move(command1Holder), std::move(command2Holder), std::move(command3Holder))}; diff --git a/wpilibNewCommands/src/test/native/cpp/frc2/command/make_vector.h b/wpilibNewCommands/src/test/native/cpp/frc2/command/make_vector.h index 996ddba2aa..295eba7645 100644 --- a/wpilibNewCommands/src/test/native/cpp/frc2/command/make_vector.h +++ b/wpilibNewCommands/src/test/native/cpp/frc2/command/make_vector.h @@ -8,59 +8,27 @@ #include #include -namespace tcb { - -namespace detail { - -template -struct vec_type_helper { - using type = T; -}; - -template -struct vec_type_helper { - using type = typename std::common_type_t; -}; - -template -using vec_type_helper_t = typename vec_type_helper::type; - -template -struct all_constructible_and_convertible : std::true_type {}; - -template -struct all_constructible_and_convertible - : std::conditional_t< - std::is_constructible_v && std::is_convertible_v, - all_constructible_and_convertible, std::false_type> {}; - -template -inline constexpr bool all_constructible_and_convertible_v = - all_constructible_and_convertible::value; - -template - requires(!std::is_trivially_copyable_v) -std::vector make_vector_impl(Args&&... args) { - std::vector vec; - vec.reserve(sizeof...(Args)); - using arr_t = int[]; - (void)arr_t{0, (vec.emplace_back(std::forward(args)), 0)...}; - return vec; -} - -template - requires std::is_trivially_copyable_v -std::vector make_vector_impl(Args&&... args) { - return std::vector{std::forward(args)...}; -} - -} // namespace detail +namespace frc2 { template > - requires detail::all_constructible_and_convertible_v -std::vector make_vector(Args&&... args) { - return detail::make_vector_impl(std::forward(args)...); + typename CommonType = std::conditional_t< + std::same_as, std::common_type_t, T>> + requires((std::is_constructible_v && + std::is_convertible_v) && + ...) +std::vector make_vector(Args&&... args) { + if constexpr (std::is_trivially_copyable_v) { + return std::vector{std::forward(args)...}; + } else { + std::vector vec; + vec.reserve(sizeof...(Args)); + + using arr_t = int[]; + [[maybe_unused]] arr_t arr{ + 0, (vec.emplace_back(std::forward(args)), 0)...}; + + return vec; + } } -} // namespace tcb +} // namespace frc2