xref: /freebsd/contrib/llvm-project/libcxx/include/__type_traits/is_member_pointer.h (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1  //===----------------------------------------------------------------------===//
2  //
3  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4  // See https://llvm.org/LICENSE.txt for license information.
5  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6  //
7  //===----------------------------------------------------------------------===//
8  
9  #ifndef _LIBCPP___TYPE_TRAITS_IS_MEMBER_POINTER_H
10  #define _LIBCPP___TYPE_TRAITS_IS_MEMBER_POINTER_H
11  
12  #include <__config>
13  #include <__type_traits/integral_constant.h>
14  #include <__type_traits/is_member_function_pointer.h>
15  
16  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
17  #  pragma GCC system_header
18  #endif
19  
20  _LIBCPP_BEGIN_NAMESPACE_STD
21  
22  #if __has_builtin(__is_member_pointer)
23  
24  template <class _Tp>
25  struct _LIBCPP_TEMPLATE_VIS is_member_pointer : _BoolConstant<__is_member_pointer(_Tp)> {};
26  
27  #  if _LIBCPP_STD_VER >= 17
28  template <class _Tp>
29  inline constexpr bool is_member_pointer_v = __is_member_pointer(_Tp);
30  #  endif
31  
32  #else // __has_builtin(__is_member_pointer)
33  
34  template <class _Tp>
35  struct _LIBCPP_TEMPLATE_VIS is_member_pointer
36      : public _BoolConstant<__libcpp_is_member_pointer<__remove_cv_t<_Tp> >::__is_member> {};
37  
38  #  if _LIBCPP_STD_VER >= 17
39  template <class _Tp>
40  inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
41  #  endif
42  
43  #endif // __has_builtin(__is_member_pointer)
44  
45  _LIBCPP_END_NAMESPACE_STD
46  
47  #endif // _LIBCPP___TYPE_TRAITS_IS_MEMBER_POINTER_H
48