//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Make sure std::array is trivially copyable whenever T is trivially copyable. // This is not technically mandated by the Standard, but libc++ has been providing // this property. #include #include struct Empty {}; struct TrivialCopy { int i; double j; }; struct NonTrivialCopy { NonTrivialCopy(NonTrivialCopy const&) {} NonTrivialCopy& operator=(NonTrivialCopy const&) { return *this; } }; template void check_trivially_copyable() { static_assert(std::is_trivially_copyable >::value, ""); static_assert(std::is_trivially_copyable >::value, ""); static_assert(std::is_trivially_copyable >::value, ""); static_assert(std::is_trivially_copyable >::value, ""); } int main(int, char**) { check_trivially_copyable(); check_trivially_copyable(); check_trivially_copyable(); check_trivially_copyable(); check_trivially_copyable(); check_trivially_copyable(); // Check that std::array is still trivially copyable when T is not static_assert(std::is_trivially_copyable >::value, ""); static_assert(!std::is_trivially_copyable >::value, ""); static_assert(!std::is_trivially_copyable >::value, ""); static_assert(!std::is_trivially_copyable >::value, ""); return 0; }