xref: /llvm-project/libcxx/test/std/containers/sequences/array/aggregate.pass.cpp (revision 6900df37d26764b828dbc5c2f98a57abbce1583e)
177b9abfcSLouis Dionne //===----------------------------------------------------------------------===//
277b9abfcSLouis Dionne //
377b9abfcSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
477b9abfcSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
577b9abfcSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
677b9abfcSLouis Dionne //
777b9abfcSLouis Dionne //===----------------------------------------------------------------------===//
877b9abfcSLouis Dionne 
977b9abfcSLouis Dionne // Make sure std::array is an aggregate type.
10*7265ff92SLouis Dionne // We can only check this in C++17 and above, because we don't have the
11*7265ff92SLouis Dionne // trait before that.
12*7265ff92SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14
1377b9abfcSLouis Dionne 
1477b9abfcSLouis Dionne #include <array>
1577b9abfcSLouis Dionne #include <type_traits>
1677b9abfcSLouis Dionne 
1777b9abfcSLouis Dionne template <typename T>
check_aggregate()18*7265ff92SLouis Dionne void check_aggregate()
1977b9abfcSLouis Dionne {
2077b9abfcSLouis Dionne     static_assert(std::is_aggregate<std::array<T, 0> >::value, "");
2177b9abfcSLouis Dionne     static_assert(std::is_aggregate<std::array<T, 1> >::value, "");
2277b9abfcSLouis Dionne     static_assert(std::is_aggregate<std::array<T, 2> >::value, "");
2377b9abfcSLouis Dionne     static_assert(std::is_aggregate<std::array<T, 3> >::value, "");
2477b9abfcSLouis Dionne     static_assert(std::is_aggregate<std::array<T, 4> >::value, "");
2577b9abfcSLouis Dionne }
2677b9abfcSLouis Dionne 
2777b9abfcSLouis Dionne struct Empty { };
28*7265ff92SLouis Dionne struct Trivial { int i; int j; };
29*7265ff92SLouis Dionne struct NonTrivial {
30*7265ff92SLouis Dionne     int i; int j;
NonTrivialNonTrivial31*7265ff92SLouis Dionne     NonTrivial(NonTrivial const&) { }
32*7265ff92SLouis Dionne };
3377b9abfcSLouis Dionne 
main(int,char **)3477b9abfcSLouis Dionne int main(int, char**)
3577b9abfcSLouis Dionne {
36*7265ff92SLouis Dionne     check_aggregate<char>();
37*7265ff92SLouis Dionne     check_aggregate<int>();
38*7265ff92SLouis Dionne     check_aggregate<long>();
39*7265ff92SLouis Dionne     check_aggregate<float>();
40*7265ff92SLouis Dionne     check_aggregate<double>();
41*7265ff92SLouis Dionne     check_aggregate<long double>();
42*7265ff92SLouis Dionne     check_aggregate<Empty>();
43*7265ff92SLouis Dionne     check_aggregate<Trivial>();
44*7265ff92SLouis Dionne     check_aggregate<NonTrivial>();
4577b9abfcSLouis Dionne 
4677b9abfcSLouis Dionne     return 0;
4777b9abfcSLouis Dionne }
48