1 #ifndef INCG_PHI_CORE_TYPE_TRAITS_IS_COMPLETE_HPP 2 #define INCG_PHI_CORE_TYPE_TRAITS_IS_COMPLETE_HPP 4 #include "phi/phi_config.hpp" 6 #if PHI_HAS_EXTENSION_PRAGMA_ONCE() 10 #include "phi/compiler_support/constexpr.hpp" 11 #include "phi/compiler_support/inline_variables.hpp" 12 #include "phi/compiler_support/intrinsics/is_complete.hpp" 13 #include "phi/type_traits/integral_constant.hpp" 15 #if PHI_SUPPORTS_IS_COMPLETE() && 0 17 DETAIL_PHI_BEGIN_NAMESPACE()
19 template <typename TypeT>
23 template <
typename TypeT>
27 # if PHI_HAS_FEATURE_VARIABLE_TEMPLATE() 29 template <
typename TypeT>
30 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_complete_v = PHI_IS_COMPLETE(TypeT);
32 template <
typename TypeT>
33 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_not_complete_v = !PHI_IS_COMPLETE(TypeT);
39 # include "phi/compiler_support/warning.hpp" 40 # include "phi/core/declval.hpp" 41 # include "phi/type_traits/detail/yes_no_type.hpp" 42 # include "phi/type_traits/is_function.hpp" 43 # include "phi/type_traits/is_rvalue_reference.hpp" 44 # include "phi/type_traits/remove_reference.hpp" 46 DETAIL_PHI_BEGIN_NAMESPACE()
48 PHI_CLANG_SUPPRESS_WARNING_PUSH()
49 PHI_CLANG_SUPPRESS_WARNING("-Wzero-as-null-pointer-constant")
53 template <
typename TypeT>
56 template <
typename OtherT,
typename = decltype(sizeof(declval<OtherT>()))>
59 template <
typename OtherT>
63 static PHI_CONSTEXPR_AND_CONST
bool value =
64 sizeof(check<TypeT>(
nullptr)) == sizeof_yes_type;
68 PHI_CLANG_SUPPRESS_WARNING_POP()
70 template <
typename TypeT>
72 :
public integral_constant<bool, is_function<typename remove_reference<TypeT>::type>::value ||
73 is_rvalue_reference<TypeT>::value ||
74 detail::is_complete_imp<TypeT>::value>
77 template <
typename TypeT>
81 template <
typename TypeT>
85 # if PHI_HAS_FEATURE_VARIABLE_TEMPLATE() 87 template <
typename TypeT>
90 template <
typename TypeT>
97 DETAIL_PHI_END_NAMESPACE()
99 #endif // INCG_PHI_CORE_TYPE_TRAITS_IS_COMPLETE_HPP Definition: integral_constant.hpp:19
Definition: yes_no_type.hpp:32
Definition: is_complete.hpp:71
Definition: is_complete.hpp:54
Definition: yes_no_type.hpp:23
Definition: is_complete.hpp:82