179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//===----------------------------------------------------------------------===//
279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//
379d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//                     The LLVM Compiler Infrastructure
479d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//
579d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
679d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow// Source Licenses. See LICENSE.TXT for details.
779d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//
879d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow//===----------------------------------------------------------------------===//
979d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
1079d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow// type_traits
1179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
1279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow// nullptr_t
137112dae6acac544a0271a85d95342c583441e2d1Dan Albert//  is_null_pointer
1479d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
1579d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow#include <type_traits>
1679d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
1779d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow#if _LIBCPP_STD_VER > 11
1879d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowtemplate <class T>
1979d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowvoid test_nullptr_imp()
2079d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow{
2179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_void<T>::value, "");
2279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert( std::is_null_pointer<T>::value, "");
2379d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_integral<T>::value, "");
2479d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_floating_point<T>::value, "");
2579d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_array<T>::value, "");
2679d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_pointer<T>::value, "");
2779d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_lvalue_reference<T>::value, "");
2879d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_rvalue_reference<T>::value, "");
2979d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_member_object_pointer<T>::value, "");
3079d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_member_function_pointer<T>::value, "");
3179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_enum<T>::value, "");
3279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_union<T>::value, "");
3379d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_class<T>::value, "");
3479d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    static_assert(!std::is_function<T>::value, "");
3579d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow}
3679d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
3779d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowtemplate <class T>
3879d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowvoid test_nullptr()
3979d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow{
4079d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    test_nullptr_imp<T>();
4179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    test_nullptr_imp<const T>();
4279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    test_nullptr_imp<volatile T>();
4379d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    test_nullptr_imp<const volatile T>();
4479d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow}
4579d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow
4679d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowint main()
4779d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow{
4879d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow    test_nullptr<std::nullptr_t>();
4979d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow}
5079d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow#else
5179d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clowint main() {}
5279d8c99a62b6a6fa0b3c0dc3f761659f62f3f587Marshall Clow#endif
53