1276792Sdim// -*- C++ -*- 2276792Sdim//===-------------------------- type_traits -------------------------------===// 3276792Sdim// 4276792Sdim// The LLVM Compiler Infrastructure 5276792Sdim// 6276792Sdim// This file is dual licensed under the MIT and the University of Illinois Open 7276792Sdim// Source Licenses. See LICENSE.TXT for details. 8276792Sdim// 9276792Sdim//===----------------------------------------------------------------------===// 10276792Sdim 11276792Sdim#ifndef _LIBCPP_EXPERIMENTAL_TYPE_TRAITS 12276792Sdim#define _LIBCPP_EXPERIMENTAL_TYPE_TRAITS 13276792Sdim 14276792Sdim/** 15276792Sdim experimental/type_traits synopsis 16276792Sdim 17276792Sdim// C++1y 18276792Sdim#include <type_traits> 19276792Sdim 20276792Sdimnamespace std { 21276792Sdimnamespace experimental { 22276792Sdiminline namespace fundamentals_v1 { 23276792Sdim 24276792Sdim // See C++14 20.10.4.1, primary type categories 25276792Sdim template <class T> constexpr bool is_void_v 26276792Sdim = is_void<T>::value; 27276792Sdim template <class T> constexpr bool is_null_pointer_v 28276792Sdim = is_null_pointer<T>::value; 29276792Sdim template <class T> constexpr bool is_integral_v 30276792Sdim = is_integral<T>::value; 31276792Sdim template <class T> constexpr bool is_floating_point_v 32276792Sdim = is_floating_point<T>::value; 33276792Sdim template <class T> constexpr bool is_array_v 34276792Sdim = is_array<T>::value; 35276792Sdim template <class T> constexpr bool is_pointer_v 36276792Sdim = is_pointer<T>::value; 37276792Sdim template <class T> constexpr bool is_lvalue_reference_v 38276792Sdim = is_lvalue_reference<T>::value; 39276792Sdim template <class T> constexpr bool is_rvalue_reference_v 40276792Sdim = is_rvalue_reference<T>::value; 41276792Sdim template <class T> constexpr bool is_member_object_pointer_v 42276792Sdim = is_member_object_pointer<T>::value; 43276792Sdim template <class T> constexpr bool is_member_function_pointer_v 44276792Sdim = is_member_function_pointer<T>::value; 45276792Sdim template <class T> constexpr bool is_enum_v 46276792Sdim = is_enum<T>::value; 47276792Sdim template <class T> constexpr bool is_union_v 48276792Sdim = is_union<T>::value; 49276792Sdim template <class T> constexpr bool is_class_v 50276792Sdim = is_class<T>::value; 51276792Sdim template <class T> constexpr bool is_function_v 52276792Sdim = is_function<T>::value; 53276792Sdim 54276792Sdim // See C++14 20.10.4.2, composite type categories 55276792Sdim template <class T> constexpr bool is_reference_v 56276792Sdim = is_reference<T>::value; 57276792Sdim template <class T> constexpr bool is_arithmetic_v 58276792Sdim = is_arithmetic<T>::value; 59276792Sdim template <class T> constexpr bool is_fundamental_v 60276792Sdim = is_fundamental<T>::value; 61276792Sdim template <class T> constexpr bool is_object_v 62276792Sdim = is_object<T>::value; 63276792Sdim template <class T> constexpr bool is_scalar_v 64276792Sdim = is_scalar<T>::value; 65276792Sdim template <class T> constexpr bool is_compound_v 66276792Sdim = is_compound<T>::value; 67276792Sdim template <class T> constexpr bool is_member_pointer_v 68276792Sdim = is_member_pointer<T>::value; 69276792Sdim 70276792Sdim // See C++14 20.10.4.3, type properties 71276792Sdim template <class T> constexpr bool is_const_v 72276792Sdim = is_const<T>::value; 73276792Sdim template <class T> constexpr bool is_volatile_v 74276792Sdim = is_volatile<T>::value; 75276792Sdim template <class T> constexpr bool is_trivial_v 76276792Sdim = is_trivial<T>::value; 77276792Sdim template <class T> constexpr bool is_trivially_copyable_v 78276792Sdim = is_trivially_copyable<T>::value; 79276792Sdim template <class T> constexpr bool is_standard_layout_v 80276792Sdim = is_standard_layout<T>::value; 81276792Sdim template <class T> constexpr bool is_pod_v 82276792Sdim = is_pod<T>::value; 83276792Sdim template <class T> constexpr bool is_literal_type_v 84276792Sdim = is_literal_type<T>::value; 85276792Sdim template <class T> constexpr bool is_empty_v 86276792Sdim = is_empty<T>::value; 87276792Sdim template <class T> constexpr bool is_polymorphic_v 88276792Sdim = is_polymorphic<T>::value; 89276792Sdim template <class T> constexpr bool is_abstract_v 90276792Sdim = is_abstract<T>::value; 91276792Sdim template <class T> constexpr bool is_final_v 92276792Sdim = is_final<T>::value; 93276792Sdim template <class T> constexpr bool is_signed_v 94276792Sdim = is_signed<T>::value; 95276792Sdim template <class T> constexpr bool is_unsigned_v 96276792Sdim = is_unsigned<T>::value; 97276792Sdim template <class T, class... Args> constexpr bool is_constructible_v 98276792Sdim = is_constructible<T, Args...>::value; 99276792Sdim template <class T> constexpr bool is_default_constructible_v 100276792Sdim = is_default_constructible<T>::value; 101276792Sdim template <class T> constexpr bool is_copy_constructible_v 102276792Sdim = is_copy_constructible<T>::value; 103276792Sdim template <class T> constexpr bool is_move_constructible_v 104276792Sdim = is_move_constructible<T>::value; 105276792Sdim template <class T, class U> constexpr bool is_assignable_v 106276792Sdim = is_assignable<T, U>::value; 107276792Sdim template <class T> constexpr bool is_copy_assignable_v 108276792Sdim = is_copy_assignable<T>::value; 109276792Sdim template <class T> constexpr bool is_move_assignable_v 110276792Sdim = is_move_assignable<T>::value; 111276792Sdim template <class T> constexpr bool is_destructible_v 112276792Sdim = is_destructible<T>::value; 113276792Sdim template <class T, class... Args> constexpr bool is_trivially_constructible_v 114276792Sdim = is_trivially_constructible<T, Args...>::value; 115276792Sdim template <class T> constexpr bool is_trivially_default_constructible_v 116276792Sdim = is_trivially_default_constructible<T>::value; 117276792Sdim template <class T> constexpr bool is_trivially_copy_constructible_v 118276792Sdim = is_trivially_copy_constructible<T>::value; 119276792Sdim template <class T> constexpr bool is_trivially_move_constructible_v 120276792Sdim = is_trivially_move_constructible<T>::value; 121276792Sdim template <class T, class U> constexpr bool is_trivially_assignable_v 122276792Sdim = is_trivially_assignable<T, U>::value; 123276792Sdim template <class T> constexpr bool is_trivially_copy_assignable_v 124276792Sdim = is_trivially_copy_assignable<T>::value; 125276792Sdim template <class T> constexpr bool is_trivially_move_assignable_v 126276792Sdim = is_trivially_move_assignable<T>::value; 127276792Sdim template <class T> constexpr bool is_trivially_destructible_v 128276792Sdim = is_trivially_destructible<T>::value; 129276792Sdim template <class T, class... Args> constexpr bool is_nothrow_constructible_v 130276792Sdim = is_nothrow_constructible<T, Args...>::value; 131276792Sdim template <class T> constexpr bool is_nothrow_default_constructible_v 132276792Sdim = is_nothrow_default_constructible<T>::value; 133276792Sdim template <class T> constexpr bool is_nothrow_copy_constructible_v 134276792Sdim = is_nothrow_copy_constructible<T>::value; 135276792Sdim template <class T> constexpr bool is_nothrow_move_constructible_v 136276792Sdim = is_nothrow_move_constructible<T>::value; 137276792Sdim template <class T, class U> constexpr bool is_nothrow_assignable_v 138276792Sdim = is_nothrow_assignable<T, U>::value; 139276792Sdim template <class T> constexpr bool is_nothrow_copy_assignable_v 140276792Sdim = is_nothrow_copy_assignable<T>::value; 141276792Sdim template <class T> constexpr bool is_nothrow_move_assignable_v 142276792Sdim = is_nothrow_move_assignable<T>::value; 143276792Sdim template <class T> constexpr bool is_nothrow_destructible_v 144276792Sdim = is_nothrow_destructible<T>::value; 145276792Sdim template <class T> constexpr bool has_virtual_destructor_v 146276792Sdim = has_virtual_destructor<T>::value; 147276792Sdim 148276792Sdim // See C++14 20.10.5, type property queries 149276792Sdim template <class T> constexpr size_t alignment_of_v 150276792Sdim = alignment_of<T>::value; 151276792Sdim template <class T> constexpr size_t rank_v 152276792Sdim = rank<T>::value; 153276792Sdim template <class T, unsigned I = 0> constexpr size_t extent_v 154276792Sdim = extent<T, I>::value; 155276792Sdim 156276792Sdim // See C++14 20.10.6, type relations 157276792Sdim template <class T, class U> constexpr bool is_same_v 158276792Sdim = is_same<T, U>::value; 159276792Sdim template <class Base, class Derived> constexpr bool is_base_of_v 160276792Sdim = is_base_of<Base, Derived>::value; 161276792Sdim template <class From, class To> constexpr bool is_convertible_v 162276792Sdim = is_convertible<From, To>::value; 163276792Sdim 164276792Sdim // 3.3.2, Other type transformations 165276792Sdim template <class> class invocation_type; // not defined 166276792Sdim template <class F, class... ArgTypes> class invocation_type<F(ArgTypes...)>; 167276792Sdim template <class> class raw_invocation_type; // not defined 168276792Sdim template <class F, class... ArgTypes> class raw_invocation_type<F(ArgTypes...)>; 169276792Sdim 170276792Sdim template <class T> 171276792Sdim using invocation_type_t = typename invocation_type<T>::type; 172276792Sdim template <class T> 173276792Sdim using raw_invocation_type_t = typename raw_invocation_type<T>::type; 174276792Sdim 175276792Sdim} // namespace fundamentals_v1 176276792Sdim} // namespace experimental 177276792Sdim} // namespace std 178276792Sdim 179276792Sdim */ 180276792Sdim 181276792Sdim#include <experimental/__config> 182276792Sdim 183276792Sdim#if _LIBCPP_STD_VER > 11 184276792Sdim 185276792Sdim#include <type_traits> 186276792Sdim 187288943Sdim#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 188288943Sdim#pragma GCC system_header 189288943Sdim#endif 190288943Sdim 191276792Sdim_LIBCPP_BEGIN_NAMESPACE_LFTS 192276792Sdim 193288943Sdim#ifndef _LIBCPP_HAS_NO_VARIABLE_TEMPLATES 194276792Sdim 195276792Sdim// C++14 20.10.4.1, primary type categories 196276792Sdim 197276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_void_v 198276792Sdim = is_void<_Tp>::value; 199276792Sdim 200276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_null_pointer_v 201276792Sdim = is_null_pointer<_Tp>::value; 202276792Sdim 203276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_integral_v 204276792Sdim = is_integral<_Tp>::value; 205276792Sdim 206276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_floating_point_v 207276792Sdim = is_floating_point<_Tp>::value; 208276792Sdim 209276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_array_v 210276792Sdim = is_array<_Tp>::value; 211276792Sdim 212276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_pointer_v 213276792Sdim = is_pointer<_Tp>::value; 214276792Sdim 215276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_lvalue_reference_v 216276792Sdim = is_lvalue_reference<_Tp>::value; 217276792Sdim 218276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_rvalue_reference_v 219276792Sdim = is_rvalue_reference<_Tp>::value; 220276792Sdim 221276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_object_pointer_v 222276792Sdim = is_member_object_pointer<_Tp>::value; 223276792Sdim 224276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_function_pointer_v 225276792Sdim = is_member_function_pointer<_Tp>::value; 226276792Sdim 227276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_enum_v 228276792Sdim = is_enum<_Tp>::value; 229276792Sdim 230276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_union_v 231276792Sdim = is_union<_Tp>::value; 232276792Sdim 233276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_class_v 234276792Sdim = is_class<_Tp>::value; 235276792Sdim 236276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_function_v 237276792Sdim = is_function<_Tp>::value; 238276792Sdim 239276792Sdim// C++14 20.10.4.2, composite type categories 240276792Sdim 241276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_reference_v 242276792Sdim = is_reference<_Tp>::value; 243276792Sdim 244276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_arithmetic_v 245276792Sdim = is_arithmetic<_Tp>::value; 246276792Sdim 247276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_fundamental_v 248276792Sdim = is_fundamental<_Tp>::value; 249276792Sdim 250276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_object_v 251276792Sdim = is_object<_Tp>::value; 252276792Sdim 253276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_scalar_v 254276792Sdim = is_scalar<_Tp>::value; 255276792Sdim 256276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_compound_v 257276792Sdim = is_compound<_Tp>::value; 258276792Sdim 259276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_member_pointer_v 260276792Sdim = is_member_pointer<_Tp>::value; 261276792Sdim 262276792Sdim// C++14 20.10.4.3, type properties 263276792Sdim 264276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_const_v 265276792Sdim = is_const<_Tp>::value; 266276792Sdim 267276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_volatile_v 268276792Sdim = is_volatile<_Tp>::value; 269276792Sdim 270276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivial_v 271276792Sdim = is_trivial<_Tp>::value; 272276792Sdim 273276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copyable_v 274276792Sdim = is_trivially_copyable<_Tp>::value; 275276792Sdim 276276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_standard_layout_v 277276792Sdim = is_standard_layout<_Tp>::value; 278276792Sdim 279276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_pod_v 280276792Sdim = is_pod<_Tp>::value; 281276792Sdim 282276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_literal_type_v 283276792Sdim = is_literal_type<_Tp>::value; 284276792Sdim 285276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_empty_v 286276792Sdim = is_empty<_Tp>::value; 287276792Sdim 288276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_polymorphic_v 289276792Sdim = is_polymorphic<_Tp>::value; 290276792Sdim 291276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_abstract_v 292276792Sdim = is_abstract<_Tp>::value; 293276792Sdim 294276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_final_v 295276792Sdim = is_final<_Tp>::value; 296276792Sdim 297276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_signed_v 298276792Sdim = is_signed<_Tp>::value; 299276792Sdim 300276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_unsigned_v 301276792Sdim = is_unsigned<_Tp>::value; 302276792Sdim 303276792Sdimtemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_constructible_v 304276792Sdim = is_constructible<_Tp, _Ts...>::value; 305276792Sdim 306276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_default_constructible_v 307276792Sdim = is_default_constructible<_Tp>::value; 308276792Sdim 309276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_copy_constructible_v 310276792Sdim = is_copy_constructible<_Tp>::value; 311276792Sdim 312276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_move_constructible_v 313276792Sdim = is_move_constructible<_Tp>::value; 314276792Sdim 315276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_assignable_v 316276792Sdim = is_assignable<_Tp, _Up>::value; 317276792Sdim 318276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_copy_assignable_v 319276792Sdim = is_copy_assignable<_Tp>::value; 320276792Sdim 321276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_move_assignable_v 322276792Sdim = is_move_assignable<_Tp>::value; 323276792Sdim 324276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_destructible_v 325276792Sdim = is_destructible<_Tp>::value; 326276792Sdim 327276792Sdimtemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_trivially_constructible_v 328276792Sdim = is_trivially_constructible<_Tp, _Ts...>::value; 329276792Sdim 330276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_default_constructible_v 331276792Sdim = is_trivially_default_constructible<_Tp>::value; 332276792Sdim 333276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copy_constructible_v 334276792Sdim = is_trivially_copy_constructible<_Tp>::value; 335276792Sdim 336276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_move_constructible_v 337276792Sdim = is_trivially_move_constructible<_Tp>::value; 338276792Sdim 339276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_trivially_assignable_v 340276792Sdim = is_trivially_assignable<_Tp, _Up>::value; 341276792Sdim 342276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_copy_assignable_v 343276792Sdim = is_trivially_copy_assignable<_Tp>::value; 344276792Sdim 345276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_move_assignable_v 346276792Sdim = is_trivially_move_assignable<_Tp>::value; 347276792Sdim 348276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_trivially_destructible_v 349276792Sdim = is_trivially_destructible<_Tp>::value; 350276792Sdim 351276792Sdimtemplate <class _Tp, class ..._Ts> _LIBCPP_CONSTEXPR bool is_nothrow_constructible_v 352276792Sdim = is_nothrow_constructible<_Tp, _Ts...>::value; 353276792Sdim 354276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_default_constructible_v 355276792Sdim = is_nothrow_default_constructible<_Tp>::value; 356276792Sdim 357276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_copy_constructible_v 358276792Sdim = is_nothrow_copy_constructible<_Tp>::value; 359276792Sdim 360276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_move_constructible_v 361276792Sdim = is_nothrow_move_constructible<_Tp>::value; 362276792Sdim 363276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_nothrow_assignable_v 364276792Sdim = is_nothrow_assignable<_Tp, _Up>::value; 365276792Sdim 366276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_copy_assignable_v 367276792Sdim = is_nothrow_copy_assignable<_Tp>::value; 368276792Sdim 369276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_move_assignable_v 370276792Sdim = is_nothrow_move_assignable<_Tp>::value; 371276792Sdim 372276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool is_nothrow_destructible_v 373276792Sdim = is_nothrow_destructible<_Tp>::value; 374276792Sdim 375276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR bool has_virtual_destructor_v 376276792Sdim = has_virtual_destructor<_Tp>::value; 377276792Sdim 378276792Sdim// C++14 20.10.5, type properties queries 379276792Sdim 380276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR size_t alignment_of_v 381276792Sdim = alignment_of<_Tp>::value; 382276792Sdim 383276792Sdimtemplate <class _Tp> _LIBCPP_CONSTEXPR size_t rank_v 384276792Sdim = rank<_Tp>::value; 385276792Sdim 386276792Sdimtemplate <class _Tp, unsigned _Id = 0> _LIBCPP_CONSTEXPR size_t extent_v 387276792Sdim = extent<_Tp, _Id>::value; 388276792Sdim 389276792Sdim// C++14 20.10.6, type relations 390276792Sdim 391276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_same_v 392276792Sdim = is_same<_Tp, _Up>::value; 393276792Sdim 394276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_base_of_v 395276792Sdim = is_base_of<_Tp, _Up>::value; 396276792Sdim 397276792Sdimtemplate <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_convertible_v 398276792Sdim = is_convertible<_Tp, _Up>::value; 399276792Sdim 400288943Sdim#endif /* _LIBCPP_HAS_NO_VARIABLE_TEMPLATES */ 401276792Sdim 402276792Sdim// 3.3.2, Other type transformations 403276792Sdim/* 404276792Sdimtemplate <class> 405276792Sdimclass _LIBCPP_TYPE_VIS_ONLY raw_invocation_type; 406276792Sdim 407276792Sdimtemplate <class _Fn, class ..._Args> 408276792Sdimclass _LIBCPP_TYPE_VIS_ONLY raw_invocation_type<_Fn(_Args...)>; 409276792Sdim 410276792Sdimtemplate <class> 411276792Sdimclass _LIBCPP_TYPE_VIS_ONLY invokation_type; 412276792Sdim 413276792Sdimtemplate <class _Fn, class ..._Args> 414276792Sdimclass _LIBCPP_TYPE_VIS_ONLY invokation_type<_Fn(_Args...)>; 415276792Sdim 416276792Sdimtemplate <class _Tp> 417276792Sdimusing invokation_type_t = typename invokation_type<_Tp>::type; 418276792Sdim 419276792Sdimtemplate <class _Tp> 420276792Sdimusing raw_invocation_type_t = typename raw_invocation_type<_Tp>::type; 421276792Sdim*/ 422276792Sdim 423276792Sdim_LIBCPP_END_NAMESPACE_LFTS 424276792Sdim 425276792Sdim#endif /* _LIBCPP_STD_VER > 11 */ 426276792Sdim 427276792Sdim#endif /* _LIBCPP_EXPERIMENTAL_TYPE_TRAITS */ 428