Phi
is_nothrow_copy_constructible.hpp
1 #ifndef INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_HPP
2 #define INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_HPP
3 
4 #include "phi/phi_config.hpp"
5 
6 #if PHI_HAS_EXTENSION_PRAGMA_ONCE()
7 # pragma once
8 #endif
9 
10 #include "phi/compiler_support/constexpr.hpp"
11 #include "phi/compiler_support/inline_variables.hpp"
12 #include "phi/type_traits/add_const.hpp"
13 #include "phi/type_traits/add_lvalue_reference.hpp"
14 #include "phi/type_traits/integral_constant.hpp"
15 #include "phi/type_traits/is_nothrow_constructible.hpp"
16 
17 #if PHI_HAS_WORKING_IS_NOTHROW_CONSTRUCTIBLE()
18 # define PHI_HAS_WORKING_IS_NOTHROW_COPY_CONSTRUCTIBLE() 1
19 #else
20 # define PHI_HAS_WORKING_IS_NOTHROW_COPY_CONSTRUCTIBLE() 0
21 #endif
22 
23 DETAIL_PHI_BEGIN_NAMESPACE()
24 
25 template <typename TypeT>
27  : public is_nothrow_constructible<
28  TypeT, typename add_lvalue_reference<typename add_const<TypeT>::type>::type>
29 {};
30 
31 template <typename TypeT>
33  : public integral_constant<bool, !is_nothrow_copy_constructible<TypeT>::value>
34 {};
35 
36 #if PHI_HAS_FEATURE_VARIABLE_TEMPLATE()
37 
38 template <typename TypeT>
39 PHI_INLINE_VARIABLE PHI_CONSTEXPR bool is_nothrow_copy_constructible_v =
41 
42 template <typename TypeT>
43 PHI_INLINE_VARIABLE PHI_CONSTEXPR bool is_not_nothrow_copy_constructible_v =
45 
46 #endif
47 
48 DETAIL_PHI_END_NAMESPACE()
49 
50 #endif // INCG_PHI_CORE_TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_HPP
Definition: integral_constant.hpp:19
Definition: is_nothrow_copy_constructible.hpp:26
Definition: add_lvalue_reference.hpp:52
Definition: is_nothrow_copy_constructible.hpp:32
Definition: is_nothrow_constructible.hpp:160
Definition: add_const.hpp:13