diff options
Diffstat (limited to 'test/std/containers/sequences/array/array.data/data.pass.cpp')
-rw-r--r-- | test/std/containers/sequences/array/array.data/data.pass.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/test/std/containers/sequences/array/array.data/data.pass.cpp b/test/std/containers/sequences/array/array.data/data.pass.cpp index d7aed70c98ad..714894308f00 100644 --- a/test/std/containers/sequences/array/array.data/data.pass.cpp +++ b/test/std/containers/sequences/array/array.data/data.pass.cpp @@ -13,6 +13,7 @@ #include <array> #include <cassert> +#include "test_macros.h" // std::array is explicitly allowed to be initialized with A a = { init-list };. // Disable the missing braces warning for this reason. @@ -34,6 +35,33 @@ int main() typedef std::array<T, 0> C; C c = {}; T* p = c.data(); - (void)p; // to placate scan-build + assert(p != nullptr); + } + { + typedef double T; + typedef std::array<const T, 0> C; + C c = {{}}; + const T* p = c.data(); + static_assert((std::is_same<decltype(c.data()), const T*>::value), ""); + assert(p != nullptr); + } + { + typedef std::max_align_t T; + typedef std::array<T, 0> C; + const C c = {}; + const T* p = c.data(); + assert(p != nullptr); + std::uintptr_t pint = reinterpret_cast<std::uintptr_t>(p); + assert(pint % TEST_ALIGNOF(std::max_align_t) == 0); + } + { + struct NoDefault { + NoDefault(int) {} + }; + typedef NoDefault T; + typedef std::array<T, 0> C; + C c = {}; + T* p = c.data(); + assert(p != nullptr); } } |