diff --git a/wpiutil/src/main/native/include/wpi/array.h b/wpiutil/src/main/native/include/wpi/array.h index f2604eced5..cfbb7b028f 100644 --- a/wpiutil/src/main/native/include/wpi/array.h +++ b/wpiutil/src/main/native/include/wpi/array.h @@ -24,33 +24,33 @@ constexpr empty_array_t empty_array; template class array : public std::array { public: - explicit array(empty_array_t) {} + constexpr explicit array(empty_array_t) {} template - array(T arg, Ts&&... args) // NOLINT + constexpr array(T arg, Ts&&... args) // NOLINT : std::array{std::forward(arg), std::forward(args)...} { static_assert(1 + sizeof...(args) == N, "Dimension mismatch"); } - array(const array&) = default; - array& operator=(const array&) = default; - array(array&&) = default; - array& operator=(array&&) = default; + constexpr array(const array&) = default; + constexpr array& operator=(const array&) = default; + constexpr array(array&&) = default; + constexpr array& operator=(array&&) = default; - array(const std::array& rhs) { // NOLINT + constexpr array(const std::array& rhs) { // NOLINT *static_cast*>(this) = rhs; } - array& operator=(const std::array& rhs) { + constexpr array& operator=(const std::array& rhs) { *static_cast*>(this) = rhs; return *this; } - array(std::array&& rhs) { // NOLINT + constexpr array(std::array&& rhs) { // NOLINT *static_cast*>(this) = rhs; } - array& operator=(std::array&& rhs) { + constexpr array& operator=(std::array&& rhs) { *static_cast*>(this) = rhs; return *this; } diff --git a/wpiutil/src/test/native/cpp/ArrayTest.cpp b/wpiutil/src/test/native/cpp/ArrayTest.cpp index 15e192801a..1f2815727a 100644 --- a/wpiutil/src/test/native/cpp/ArrayTest.cpp +++ b/wpiutil/src/test/native/cpp/ArrayTest.cpp @@ -15,16 +15,20 @@ class MoveOnlyType { } // namespace TEST(ArrayTest, CopyableTypeCompiles) { - wpi::array arr1{1, 2, 3}; + constexpr wpi::array arr1{1, 2, 3}; + static_cast(arr1); // Test deduction guide - wpi::array ar2{1, 2, 3}; + constexpr wpi::array arr2{1, 2, 3}; + static_cast(arr2); } TEST(ArrayTest, MoveOnlyTypeCompiles) { - wpi::array arr1{MoveOnlyType{}, MoveOnlyType{}, - MoveOnlyType{}}; + constexpr wpi::array arr1{MoveOnlyType{}, MoveOnlyType{}, + MoveOnlyType{}}; + static_cast(arr1); // Test deduction guide - wpi::array arr2{MoveOnlyType{}, MoveOnlyType{}, MoveOnlyType{}}; + constexpr wpi::array arr2{MoveOnlyType{}, MoveOnlyType{}, MoveOnlyType{}}; + static_cast(arr2); }