small_type.pass.cpp revision 7175a079211ec78c8232d9d55fa4c1f9eeae803d
17175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier//===----------------------------------------------------------------------===// 27175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// 37175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// The LLVM Compiler Infrastructure 47175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// 57175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open 67175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// Source Licenses. See LICENSE.TXT for details. 77175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// 87175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier//===----------------------------------------------------------------------===// 97175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 107175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// UNSUPPORTED: c++98, c++03, c++11 117175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 127175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// <experimental/any> 137175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 147175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier// Check that the size and alignment of any are what we expect. 157175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 167175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier#include <experimental/any> 177175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier#include "any_helpers.h" 187175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 197175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselierclass SmallThrowsDtor 207175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier{ 217175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselierpublic: 227175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier SmallThrowsDtor() {} 237175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier SmallThrowsDtor(SmallThrowsDtor const &) noexcept {} 247175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier SmallThrowsDtor(SmallThrowsDtor &&) noexcept {} 257175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier ~SmallThrowsDtor() noexcept(false) {} 267175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier}; 277175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier 287175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselierint main() 297175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier{ 307175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier using std::experimental::any; 317175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier using std::experimental::__any_imp::_IsSmallObject; 327175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(_IsSmallObject<small>::value, ""); 337175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(_IsSmallObject<void*>::value, ""); 347175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(!_IsSmallObject<SmallThrowsDtor>::value, ""); 357175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(!_IsSmallObject<large>::value, ""); 367175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier // long double is over aligned. 377175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(sizeof(long double) <= sizeof(void*) * 3, ""); 387175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(alignof(long double) > alignof(void*), ""); 397175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier static_assert(!_IsSmallObject<long double>::value, ""); 407175a079211ec78c8232d9d55fa4c1f9eeae803dEric Fiselier} 41