11468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//===----------------------------------------------------------------------===//
21468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//
31468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//                     The LLVM Compiler Infrastructure
41468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//
51468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
61468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
71468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//
81468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//===----------------------------------------------------------------------===//
91468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
101468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// type_traits
111468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
121468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// is_trivially_default_constructible
131468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
141468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant#include <type_traits>
151468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
161468b668aa964beb1220e9b36162b092fb54952bHoward Hinnanttemplate <class T>
171468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantvoid test_is_trivially_default_constructible()
181468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
191468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert( std::is_trivially_default_constructible<T>::value, "");
201468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert( std::is_trivially_default_constructible<const T>::value, "");
211468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert( std::is_trivially_default_constructible<volatile T>::value, "");
221468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert( std::is_trivially_default_constructible<const volatile T>::value, "");
231468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}
241468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
251468b668aa964beb1220e9b36162b092fb54952bHoward Hinnanttemplate <class T>
261468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantvoid test_has_not_trivial_default_constructor()
271468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
281468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert(!std::is_trivially_default_constructible<T>::value, "");
291468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert(!std::is_trivially_default_constructible<const T>::value, "");
301468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert(!std::is_trivially_default_constructible<volatile T>::value, "");
311468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    static_assert(!std::is_trivially_default_constructible<const volatile T>::value, "");
321468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}
331468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
341468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Empty
351468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
361468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant};
371468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
381468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass NotEmpty
391468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
401468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    virtual ~NotEmpty();
411468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant};
421468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
431468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantunion Union {};
441468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
451468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct bit_zero
461468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
471468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    int :  0;
481468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant};
491468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
501468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Abstract
511468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
521468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    virtual ~Abstract() = 0;
531468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant};
541468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
551468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct A
561468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
571468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    A();
581468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant};
591468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
601468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantint main()
611468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{
621468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_has_not_trivial_default_constructor<void>();
631468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_has_not_trivial_default_constructor<int&>();
641468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_has_not_trivial_default_constructor<A>();
651468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_has_not_trivial_default_constructor<Abstract>();
661468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_has_not_trivial_default_constructor<NotEmpty>();
671468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant
681468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<Union>();
691468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<Empty>();
701468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<int>();
711468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<double>();
721468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<int*>();
731468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<const int*>();
741468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<char[3]>();
751468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant    test_is_trivially_default_constructible<bit_zero>();
761468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}
77