1// { dg-options "-std=gnu++11" } 2// { dg-do compile } 3// 2007-09-17 Paolo Carlini <pcarlini@suse.de> 4// 5// Copyright (C) 2007-2015 Free Software Foundation, Inc. 6// 7// This file is part of the GNU ISO C++ Library. This library is free 8// software; you can redistribute it and/or modify it under the 9// terms of the GNU General Public License as published by the 10// Free Software Foundation; either version 3, or (at your option) 11// any later version. 12// 13// This library is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17// 18// You should have received a copy of the GNU General Public License along 19// with this library; see the file COPYING3. If not see 20// <http://www.gnu.org/licenses/>. 21 22#include <type_traits> 23#include <testsuite_tr1.h> 24 25struct MSAlignType { } __attribute__((__aligned__)); 26 27void test01() 28{ 29 using std::aligned_storage; 30 using std::alignment_of; 31 using namespace __gnu_test; 32 33 const std::size_t align_c = alignment_of<char>::value; 34 static_assert(sizeof(aligned_storage<4, align_c>::type) >= 4, ""); 35 static_assert(__alignof__(aligned_storage<4, align_c>::type) == align_c, ""); 36 37 const std::size_t align_s = alignment_of<short>::value; 38 static_assert(sizeof(aligned_storage<1, align_s>::type) >= 1, ""); 39 static_assert(__alignof__(aligned_storage<1, align_s>::type) == align_s, ""); 40 41 const std::size_t align_i = alignment_of<int>::value; 42 static_assert(sizeof(aligned_storage<7, align_i>::type) >= 7, ""); 43 static_assert(__alignof__(aligned_storage<7, align_i>::type) == align_i, ""); 44 45 const std::size_t align_d = alignment_of<double>::value; 46 static_assert(sizeof(aligned_storage<2, align_d>::type) >= 2, ""); 47 static_assert(__alignof__(aligned_storage<2, align_d>::type) == align_d, ""); 48 49 const std::size_t align_ai = alignment_of<int[4]>::value; 50 static_assert(sizeof(aligned_storage<20, align_ai>::type) >= 20, ""); 51 static_assert(__alignof__(aligned_storage<20, align_ai>::type) == align_ai, 52 ""); 53 54 const std::size_t align_ct = alignment_of<ClassType>::value; 55 static_assert(sizeof(aligned_storage<11, align_ct>::type) >= 11, ""); 56 static_assert(__alignof__(aligned_storage<11, align_ct>::type) == align_ct, 57 ""); 58 59 const std::size_t align_msa = alignment_of<MSAlignType>::value; 60 static_assert(sizeof(aligned_storage<5>::type) >= 5, ""); 61 static_assert(__alignof__(aligned_storage<5>::type) == align_msa, ""); 62} 63