1 #ifndef INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_CONVERTIBLE_HPP 2 #define INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_CONVERTIBLE_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" 13 #if PHI_HAS_FEATURE_NOEXCEPT() 15 # include "phi/compiler_support/warning.hpp" 16 # include "phi/core/declval.hpp" 17 # include "phi/type_traits/integral_constant.hpp" 18 # include "phi/type_traits/is_convertible.hpp" 19 # include "phi/type_traits/is_void.hpp" 21 PHI_CLANG_SUPPRESS_WARNING_PUSH()
22 PHI_CLANG_SUPPRESS_WARNING("-Wunused-template")
24 DETAIL_PHI_BEGIN_NAMESPACE()
28 template <
typename TypeT>
29 static void is_nothrow_convertible_test_noexcept(TypeT) noexcept;
31 template <
typename FromT,
typename ToT>
33 noexcept(is_nothrow_convertible_test_noexcept<ToT>(declval<FromT>()))>
34 is_nothrow_convertible_test();
36 template <
typename FromT,
typename ToT>
37 struct is_nothrow_convertible_impl_3
38 :
public decltype(is_nothrow_convertible_test<FromT, ToT>())
41 template <typename FromT, typename ToT, bool = is_convertible<FromT, ToT>::value>
42 struct is_nothrow_convertible_impl_2 :
public is_nothrow_convertible_impl_3<FromT, ToT>
45 template <
typename FromT,
typename ToT>
46 struct is_nothrow_convertible_impl_2<FromT, ToT, false> :
public false_type 49 template <typename FromT, typename ToT, bool = is_void<FromT>::value &&
is_void<ToT>::value>
50 struct is_nothrow_convertible_impl :
public is_nothrow_convertible_impl_2<FromT, ToT>
53 template <
typename FromT,
typename ToT>
54 struct is_nothrow_convertible_impl<FromT, ToT, true> :
public true_type 59 PHI_CLANG_SUPPRESS_WARNING_POP()
61 template <typename FromT, typename ToT>
65 template <
typename FromT,
typename ToT>
70 # if PHI_HAS_FEATURE_VARIABLE_TEMPLATE() 72 template <
typename FromT,
typename ToT>
73 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_nothrow_convertible_v =
76 template <
typename FromT,
typename ToT>
77 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_not_nothrow_convertible_v =
84 # include "phi/type_traits/integral_constant.hpp" 88 DETAIL_PHI_BEGIN_NAMESPACE()
90 template <typename FromT, typename ToT>
94 template <
typename FromT,
typename ToT>
98 # if PHI_HAS_FEATURE_VARIABLE_TEMPLATE() 100 template <
typename FromT,
typename ToT>
101 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_nothrow_convertible_v =
true;
103 template <
typename FromT,
typename ToT>
104 PHI_INLINE_VARIABLE PHI_CONSTEXPR
bool is_not_nothrow_convertible_v =
false;
110 DETAIL_PHI_END_NAMESPACE()
112 #endif // INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_CONVERTIBLE_HPP Definition: integral_constant.hpp:19
Definition: is_nothrow_convertible.hpp:91
Definition: is_nothrow_convertible.hpp:95
Definition: is_void.hpp:17