diff --git a/wpiutil/src/main/native/include/wpi/array.h b/wpiutil/src/main/native/include/wpi/array.h index 5a0337179c..f2604eced5 100644 --- a/wpiutil/src/main/native/include/wpi/array.h +++ b/wpiutil/src/main/native/include/wpi/array.h @@ -18,8 +18,8 @@ constexpr empty_array_t empty_array; * This class is a wrapper around std::array that does compile time size * checking. * - * std::array's implicit constructor can lead result in uninitialized elements - * if the number of arguments doesn't match the std::array size. + * std::array's implicit constructor can result in uninitialized elements if the + * number of arguments doesn't match the std::array size. */ template class array : public std::array { @@ -28,7 +28,7 @@ class array : public std::array { template array(T arg, Ts&&... args) // NOLINT - : std::array{arg, std::forward(args)...} { + : std::array{std::forward(arg), std::forward(args)...} { static_assert(1 + sizeof...(args) == N, "Dimension mismatch"); } diff --git a/wpiutil/src/test/native/cpp/ArrayTest.cpp b/wpiutil/src/test/native/cpp/ArrayTest.cpp new file mode 100644 index 0000000000..15e192801a --- /dev/null +++ b/wpiutil/src/test/native/cpp/ArrayTest.cpp @@ -0,0 +1,30 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +#include "gtest/gtest.h" +#include "wpi/array.h" + +namespace { +class MoveOnlyType { + public: + MoveOnlyType() = default; + MoveOnlyType(MoveOnlyType&&) = default; + MoveOnlyType& operator=(MoveOnlyType&&) = default; +}; +} // namespace + +TEST(ArrayTest, CopyableTypeCompiles) { + wpi::array arr1{1, 2, 3}; + + // Test deduction guide + wpi::array ar2{1, 2, 3}; +} + +TEST(ArrayTest, MoveOnlyTypeCompiles) { + wpi::array arr1{MoveOnlyType{}, MoveOnlyType{}, + MoveOnlyType{}}; + + // Test deduction guide + wpi::array arr2{MoveOnlyType{}, MoveOnlyType{}, MoveOnlyType{}}; +}