type_traits revision 276792
126997Sgibbs// -*- C++ -*- 226997Sgibbs//===-------------------------- type_traits -------------------------------===// 313177Sgibbs// 426997Sgibbs// The LLVM Compiler Infrastructure 526997Sgibbs// 613177Sgibbs// This file is dual licensed under the MIT and the University of Illinois Open 726997Sgibbs// Source Licenses. See LICENSE.TXT for details. 826997Sgibbs// 926997Sgibbs//===----------------------------------------------------------------------===// 1026997Sgibbs 1126997Sgibbs#ifndef _LIBCPP_EXPERIMENTAL_TYPE_TRAITS 1226997Sgibbs#define _LIBCPP_EXPERIMENTAL_TYPE_TRAITS 1326997Sgibbs 1426997Sgibbs/** 1526997Sgibbs experimental/type_traits synopsis 1626997Sgibbs 1726997Sgibbs// C++1y 1813177Sgibbs#include <type_traits> 1926997Sgibbs 2026997Sgibbsnamespace std { 2126997Sgibbsnamespace experimental { 2226997Sgibbsinline namespace fundamentals_v1 { 2326997Sgibbs 2426997Sgibbs // See C++14 20.10.4.1, primary type categories 2513177Sgibbs template <class T> constexpr bool is_void_v 2626997Sgibbs = is_void<T>::value; 2726997Sgibbs template <class T> constexpr bool is_null_pointer_v 2826997Sgibbs = is_null_pointer<T>::value; 2926997Sgibbs template <class T> constexpr bool is_integral_v 3026997Sgibbs = is_integral<T>::value; 3126997Sgibbs template <class T> constexpr bool is_floating_point_v 3226997Sgibbs = is_floating_point<T>::value; 3326997Sgibbs template <class T> constexpr bool is_array_v 3426997Sgibbs = is_array<T>::value; 3526997Sgibbs template <class T> constexpr bool is_pointer_v 3626997Sgibbs = is_pointer<T>::value; 3713177Sgibbs template <class T> constexpr bool is_lvalue_reference_v 3829897Sgibbs = is_lvalue_reference<T>::value; 3926997Sgibbs template <class T> constexpr bool is_rvalue_reference_v 404568Sgibbs = is_rvalue_reference<T>::value; 4123925Sgibbs template <class T> constexpr bool is_member_object_pointer_v 4223925Sgibbs = is_member_object_pointer<T>::value; 435647Sgibbs template <class T> constexpr bool is_member_function_pointer_v 4413177Sgibbs = is_member_function_pointer<T>::value; 4519164Sgibbs template <class T> constexpr bool is_enum_v 4619164Sgibbs = is_enum<T>::value; 4713690Sgibbs template <class T> constexpr bool is_union_v 4813690Sgibbs = is_union<T>::value; 4913690Sgibbs template <class T> constexpr bool is_class_v 5013690Sgibbs = is_class<T>::value; 5113690Sgibbs template <class T> constexpr bool is_function_v 5213690Sgibbs = is_function<T>::value; 5313690Sgibbs 5413690Sgibbs // See C++14 20.10.4.2, composite type categories 5519164Sgibbs template <class T> constexpr bool is_reference_v 5619164Sgibbs = is_reference<T>::value; 5719164Sgibbs template <class T> constexpr bool is_arithmetic_v 5819164Sgibbs = is_arithmetic<T>::value; 5919164Sgibbs template <class T> constexpr bool is_fundamental_v 6013177Sgibbs = is_fundamental<T>::value; 614568Sgibbs template <class T> constexpr bool is_object_v 6213177Sgibbs = is_object<T>::value; 6314449Sgibbs template <class T> constexpr bool is_scalar_v 6414449Sgibbs = is_scalar<T>::value; 6513177Sgibbs template <class T> constexpr bool is_compound_v 6614449Sgibbs = is_compound<T>::value; 6723925Sgibbs template <class T> constexpr bool is_member_pointer_v 6823925Sgibbs = is_member_pointer<T>::value; 6923925Sgibbs 7023925Sgibbs // See C++14 20.10.4.3, type properties 718104Sgibbs template <class T> constexpr bool is_const_v 7224662Sgibbs = is_const<T>::value; 7324662Sgibbs template <class T> constexpr bool is_volatile_v 7423925Sgibbs = is_volatile<T>::value; 7523925Sgibbs template <class T> constexpr bool is_trivial_v 7613177Sgibbs = is_trivial<T>::value; 7723925Sgibbs template <class T> constexpr bool is_trivially_copyable_v 7823925Sgibbs = is_trivially_copyable<T>::value; 7923925Sgibbs template <class T> constexpr bool is_standard_layout_v 8023925Sgibbs = is_standard_layout<T>::value; 8113177Sgibbs template <class T> constexpr bool is_pod_v 8223925Sgibbs = is_pod<T>::value; 8324662Sgibbs template <class T> constexpr bool is_literal_type_v 8424662Sgibbs = is_literal_type<T>::value; 8523925Sgibbs template <class T> constexpr bool is_empty_v 8623925Sgibbs = is_empty<T>::value; 8723925Sgibbs template <class T> constexpr bool is_polymorphic_v 8823925Sgibbs = is_polymorphic<T>::value; 8919164Sgibbs template <class T> constexpr bool is_abstract_v 9019164Sgibbs = is_abstract<T>::value; 9129897Sgibbs template <class T> constexpr bool is_final_v 924568Sgibbs = is_final<T>::value; 9313690Sgibbs template <class T> constexpr bool is_signed_v 9413690Sgibbs = is_signed<T>::value; 9519164Sgibbs template <class T> constexpr bool is_unsigned_v 9623925Sgibbs = is_unsigned<T>::value; 9719164Sgibbs template <class T, class... Args> constexpr bool is_constructible_v 9813177Sgibbs = is_constructible<T, Args...>::value; 9923925Sgibbs template <class T> constexpr bool is_default_constructible_v 10023925Sgibbs = is_default_constructible<T>::value; 10123925Sgibbs template <class T> constexpr bool is_copy_constructible_v 10223925Sgibbs = is_copy_constructible<T>::value; 10319164Sgibbs template <class T> constexpr bool is_move_constructible_v 10423925Sgibbs = is_move_constructible<T>::value; 10523925Sgibbs template <class T, class U> constexpr bool is_assignable_v 10619164Sgibbs = is_assignable<T, U>::value; 10723925Sgibbs template <class T> constexpr bool is_copy_assignable_v 10823925Sgibbs = is_copy_assignable<T>::value; 10919164Sgibbs template <class T> constexpr bool is_move_assignable_v 11019164Sgibbs = is_move_assignable<T>::value; 11119164Sgibbs template <class T> constexpr bool is_destructible_v 11219164Sgibbs = is_destructible<T>::value; 11323925Sgibbs template <class T, class... Args> constexpr bool is_trivially_constructible_v 11423925Sgibbs = is_trivially_constructible<T, Args...>::value; 1154568Sgibbs template <class T> constexpr bool is_trivially_default_constructible_v 11613177Sgibbs = is_trivially_default_constructible<T>::value; 11713177Sgibbs template <class T> constexpr bool is_trivially_copy_constructible_v 11813177Sgibbs = is_trivially_copy_constructible<T>::value; 11913177Sgibbs template <class T> constexpr bool is_trivially_move_constructible_v 12013177Sgibbs = is_trivially_move_constructible<T>::value; 12119921Sgibbs template <class T, class U> constexpr bool is_trivially_assignable_v 12219164Sgibbs = is_trivially_assignable<T, U>::value; 12319164Sgibbs template <class T> constexpr bool is_trivially_copy_assignable_v 12413177Sgibbs = is_trivially_copy_assignable<T>::value; 1255647Sgibbs template <class T> constexpr bool is_trivially_move_assignable_v 12623925Sgibbs = is_trivially_move_assignable<T>::value; 12723925Sgibbs template <class T> constexpr bool is_trivially_destructible_v 12823925Sgibbs = is_trivially_destructible<T>::value; 12923925Sgibbs template <class T, class... Args> constexpr bool is_nothrow_constructible_v 13023925Sgibbs = is_nothrow_constructible<T, Args...>::value; 13119164Sgibbs template <class T> constexpr bool is_nothrow_default_constructible_v 13219164Sgibbs = is_nothrow_default_constructible<T>::value; 13319164Sgibbs template <class T> constexpr bool is_nothrow_copy_constructible_v 13419164Sgibbs = is_nothrow_copy_constructible<T>::value; 13519164Sgibbs template <class T> constexpr bool is_nothrow_move_constructible_v 13623925Sgibbs = is_nothrow_move_constructible<T>::value; 13723925Sgibbs template <class T, class U> constexpr bool is_nothrow_assignable_v 13819164Sgibbs = is_nothrow_assignable<T, U>::value; 13919164Sgibbs template <class T> constexpr bool is_nothrow_copy_assignable_v 14019164Sgibbs = is_nothrow_copy_assignable<T>::value; 14119164Sgibbs template <class T> constexpr bool is_nothrow_move_assignable_v 14219164Sgibbs = is_nothrow_move_assignable<T>::value; 14323925Sgibbs template <class T> constexpr bool is_nothrow_destructible_v 14423925Sgibbs = is_nothrow_destructible<T>::value; 14519164Sgibbs template <class T> constexpr bool has_virtual_destructor_v 14623925Sgibbs = has_virtual_destructor<T>::value; 14719218Sgibbs 14819218Sgibbs // See C++14 20.10.5, type property queries 14921947Sgibbs template <class T> constexpr size_t alignment_of_v 15019218Sgibbs = alignment_of<T>::value; 15123925Sgibbs template <class T> constexpr size_t rank_v 15223925Sgibbs = rank<T>::value; 15319218Sgibbs template <class T, unsigned I = 0> constexpr size_t extent_v 15419164Sgibbs = extent<T, I>::value; 15523925Sgibbs 15619164Sgibbs // See C++14 20.10.6, type relations 15723925Sgibbs template <class T, class U> constexpr bool is_same_v 15823925Sgibbs = is_same<T, U>::value; 15923925Sgibbs template <class Base, class Derived> constexpr bool is_base_of_v 16025005Sgibbs = is_base_of<Base, Derived>::value; 16119164Sgibbs template <class From, class To> constexpr bool is_convertible_v 16223925Sgibbs = is_convertible<From, To>::value; 16323925Sgibbs 16423925Sgibbs // 3.3.2, Other type transformations 16523925Sgibbs template <class> class invocation_type; // not defined 16625005Sgibbs template <class F, class... ArgTypes> class invocation_type<F(ArgTypes...)>; 16719164Sgibbs template <class> class raw_invocation_type; // not defined 16823925Sgibbs template <class F, class... ArgTypes> class raw_invocation_type<F(ArgTypes...)>; 16923925Sgibbs 17023925Sgibbs template <class T> 1714568Sgibbs using invocation_type_t = typename invocation_type<T>::type; 1725326Sgibbs template <class T> 17319164Sgibbs using raw_invocation_type_t = typename raw_invocation_type<T>::type; 17419164Sgibbs 17519164Sgibbs} // namespace fundamentals_v1 17619164Sgibbs} // namespace experimental 17723925Sgibbs} // namespace std 17823925Sgibbs 17923925Sgibbs */ 18023925Sgibbs 18123925Sgibbs#include <experimental/__config> 18223925Sgibbs 18323925Sgibbs#if _LIBCPP_STD_VER > 11 18423925Sgibbs 18523925Sgibbs#include <type_traits> 18623925Sgibbs 18723925Sgibbs_LIBCPP_BEGIN_NAMESPACE_LFTS 1888104Sgibbs 18923925Sgibbs#if __has_feature(cxx_variable_templates) 19023991Sgibbs 19123925Sgibbs// C++14 20.10.4.1, primary type categories 19223925Sgibbs 19323925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_void_v 19423925Sgibbs = is_void<_Tp>::value; 19523991Sgibbs 19623925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_null_pointer_v 19723925Sgibbs = is_null_pointer<_Tp>::value; 19823925Sgibbs 19923925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_integral_v 20023925Sgibbs = is_integral<_Tp>::value; 20113177Sgibbs 20223925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_floating_point_v 20323925Sgibbs = is_floating_point<_Tp>::value; 20413177Sgibbs 20523925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_array_v 20623925Sgibbs = is_array<_Tp>::value; 20723925Sgibbs 20823925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_pointer_v 20923925Sgibbs = is_pointer<_Tp>::value; 21023925Sgibbs 21123925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_lvalue_reference_v 2124568Sgibbs = is_lvalue_reference<_Tp>::value; 21313177Sgibbs 21423925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_rvalue_reference_v 21523925Sgibbs = is_rvalue_reference<_Tp>::value; 21623925Sgibbs 21723925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_object_pointer_v 21823925Sgibbs = is_member_object_pointer<_Tp>::value; 21923925Sgibbs 22025005Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_function_pointer_v 22123925Sgibbs = is_member_function_pointer<_Tp>::value; 22223925Sgibbs 22323925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_enum_v 22423925Sgibbs = is_enum<_Tp>::value; 22525005Sgibbs 22625005Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_union_v 22724914Sgibbs = is_union<_Tp>::value; 22823925Sgibbs 22923925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_class_v 23013177Sgibbs = is_class<_Tp>::value; 23113177Sgibbs 23213177Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_function_v 23313177Sgibbs = is_function<_Tp>::value; 23413177Sgibbs 23513177Sgibbs// C++14 20.10.4.2, composite type categories 23613177Sgibbs 2378567Sdgtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_reference_v 23813177Sgibbs = is_reference<_Tp>::value; 23923925Sgibbs 24023925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_arithmetic_v 24123925Sgibbs = is_arithmetic<_Tp>::value; 24223925Sgibbs 24323925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_fundamental_v 2444568Sgibbs = is_fundamental<_Tp>::value; 24513177Sgibbs 24615328Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_object_v 24715328Sgibbs = is_object<_Tp>::value; 24813177Sgibbs 2496608Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_scalar_v 25023925Sgibbs = is_scalar<_Tp>::value; 25123925Sgibbs 25223925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_compound_v 25323925Sgibbs = is_compound<_Tp>::value; 2546608Sgibbs 25518762Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_pointer_v 25618762Sgibbs = is_member_pointer<_Tp>::value; 25718762Sgibbs 25818762Sgibbs// C++14 20.10.4.3, type properties 25918762Sgibbs 26023925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_const_v 26123925Sgibbs = is_const<_Tp>::value; 2626608Sgibbs 2638104Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_volatile_v 26425005Sgibbs = is_volatile<_Tp>::value; 26525005Sgibbs 26625005Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivial_v 26725005Sgibbs = is_trivial<_Tp>::value; 26825005Sgibbs 26925005Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copyable_v 27025005Sgibbs = is_trivially_copyable<_Tp>::value; 27113177Sgibbs 27222451Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_standard_layout_v 27322451Sgibbs = is_standard_layout<_Tp>::value; 27423925Sgibbs 27523925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_pod_v 27622451Sgibbs = is_pod<_Tp>::value; 27723925Sgibbs 27823925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_literal_type_v 27923925Sgibbs = is_literal_type<_Tp>::value; 28022451Sgibbs 28123925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_empty_v 28223925Sgibbs = is_empty<_Tp>::value; 28323925Sgibbs 28423925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_polymorphic_v 28523925Sgibbs = is_polymorphic<_Tp>::value; 28622451Sgibbs 28722451Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_abstract_v 28813177Sgibbs = is_abstract<_Tp>::value; 28919164Sgibbs 29019164Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_final_v 29113177Sgibbs = is_final<_Tp>::value; 29219164Sgibbs 29323925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_signed_v 29423925Sgibbs = is_signed<_Tp>::value; 29523925Sgibbs 29623925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_unsigned_v 29719164Sgibbs = is_unsigned<_Tp>::value; 29823925Sgibbs 29923925Sgibbstemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_constructible_v 30013177Sgibbs = is_constructible<_Tp, _Ts...>::value; 30115843Sgibbs 30213177Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_default_constructible_v 30313177Sgibbs = is_default_constructible<_Tp>::value; 30413177Sgibbs 30513177Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_copy_constructible_v 30613177Sgibbs = is_copy_constructible<_Tp>::value; 30713177Sgibbs 30813177Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_move_constructible_v 3094568Sgibbs = is_move_constructible<_Tp>::value; 31024794Sgibbs 31124794Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_assignable_v 3124568Sgibbs = is_assignable<_Tp, _Up>::value; 31323925Sgibbs 31423925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_copy_assignable_v 31523925Sgibbs = is_copy_assignable<_Tp>::value; 3164568Sgibbs 31723925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_move_assignable_v 31823925Sgibbs = is_move_assignable<_Tp>::value; 31923925Sgibbs 32023925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_destructible_v 32123925Sgibbs = is_destructible<_Tp>::value; 32223925Sgibbs 3234568Sgibbstemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_trivially_constructible_v 32423925Sgibbs = is_trivially_constructible<_Tp, _Ts...>::value; 32523925Sgibbs 3264568Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_default_constructible_v 32723925Sgibbs = is_trivially_default_constructible<_Tp>::value; 32823925Sgibbs 32924794Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copy_constructible_v 33023925Sgibbs = is_trivially_copy_constructible<_Tp>::value; 33123925Sgibbs 33223925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_move_constructible_v 33323925Sgibbs = is_trivially_move_constructible<_Tp>::value; 33423925Sgibbs 33523925Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_trivially_assignable_v 33623925Sgibbs = is_trivially_assignable<_Tp, _Up>::value; 33723925Sgibbs 33823925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copy_assignable_v 33923925Sgibbs = is_trivially_copy_assignable<_Tp>::value; 34023925Sgibbs 34123925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_move_assignable_v 34223925Sgibbs = is_trivially_move_assignable<_Tp>::value; 34323925Sgibbs 34423925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_destructible_v 34523925Sgibbs = is_trivially_destructible<_Tp>::value; 34623925Sgibbs 3474568Sgibbstemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_nothrow_constructible_v 34823925Sgibbs = is_nothrow_constructible<_Tp, _Ts...>::value; 34923925Sgibbs 3504568Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_default_constructible_v 35113177Sgibbs = is_nothrow_default_constructible<_Tp>::value; 35213177Sgibbs 35313177Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_copy_constructible_v 35413177Sgibbs = is_nothrow_copy_constructible<_Tp>::value; 3559928Sgibbs 35623925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_move_constructible_v 35723925Sgibbs = is_nothrow_move_constructible<_Tp>::value; 35823925Sgibbs 3594568Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_nothrow_assignable_v 3609928Sgibbs = is_nothrow_assignable<_Tp, _Up>::value; 36123925Sgibbs 3629928Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_copy_assignable_v 36323925Sgibbs = is_nothrow_copy_assignable<_Tp>::value; 36419164Sgibbs 36519164Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_move_assignable_v 36619164Sgibbs = is_nothrow_move_assignable<_Tp>::value; 3675775Sgibbs 36823925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_destructible_v 3694568Sgibbs = is_nothrow_destructible<_Tp>::value; 37019164Sgibbs 37119164Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR bool has_virtual_destructor_v 37219164Sgibbs = has_virtual_destructor<_Tp>::value; 37319164Sgibbs 37419164Sgibbs// C++14 20.10.5, type properties queries 37519164Sgibbs 37623925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR size_t alignment_of_v 37723925Sgibbs = alignment_of<_Tp>::value; 37819164Sgibbs 37923925Sgibbstemplate <class _Tp> _LIBCPP_CONSTEXPR size_t rank_v 38019164Sgibbs = rank<_Tp>::value; 38123925Sgibbs 38219164Sgibbstemplate <class _Tp, unsigned _Id = 0> _LIBCPP_CONSTEXPR size_t extent_v 38323925Sgibbs = extent<_Tp, _Id>::value; 38423925Sgibbs 38519164Sgibbs// C++14 20.10.6, type relations 3869928Sgibbs 38716260Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_same_v 38823925Sgibbs = is_same<_Tp, _Up>::value; 38916260Sgibbs 39016260Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_base_of_v 39116260Sgibbs = is_base_of<_Tp, _Up>::value; 39216260Sgibbs 39316260Sgibbstemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_convertible_v 39416260Sgibbs = is_convertible<_Tp, _Up>::value; 39523925Sgibbs 39623925Sgibbs#endif /* __has_feature(cxx_variable_templates) */ 39723925Sgibbs 39823925Sgibbs// 3.3.2, Other type transformations 39923925Sgibbs/* 40016260Sgibbstemplate <class> 40116260Sgibbsclass _LIBCPP_TYPE_VIS_ONLY raw_invocation_type; 40219164Sgibbs 40323925Sgibbstemplate <class _Fn, class ..._Args> 40423925Sgibbsclass _LIBCPP_TYPE_VIS_ONLY raw_invocation_type<_Fn(_Args...)>; 4059928Sgibbs 40623925Sgibbstemplate <class> 4074568Sgibbsclass _LIBCPP_TYPE_VIS_ONLY invokation_type; 40816260Sgibbs 40923925Sgibbstemplate <class _Fn, class ..._Args> 41016260Sgibbsclass _LIBCPP_TYPE_VIS_ONLY invokation_type<_Fn(_Args...)>; 41122451Sgibbs 41223925Sgibbstemplate <class _Tp> 4137532Sgibbsusing invokation_type_t = typename invokation_type<_Tp>::type; 41413177Sgibbs 41513177Sgibbstemplate <class _Tp> 41613177Sgibbsusing raw_invocation_type_t = typename raw_invocation_type<_Tp>::type; 4179928Sgibbs*/ 41823925Sgibbs 4194568Sgibbs_LIBCPP_END_NAMESPACE_LFTS 42023925Sgibbs 4214568Sgibbs#endif /* _LIBCPP_STD_VER > 11 */ 42223925Sgibbs 42323925Sgibbs#endif /* _LIBCPP_EXPERIMENTAL_TYPE_TRAITS */ 42423925Sgibbs