Phi
is_void.hpp
1 #ifndef INCG_PHI_CORE_TYPE_TRAITS_IS_VOID_HPP
2 #define INCG_PHI_CORE_TYPE_TRAITS_IS_VOID_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/integral_constant.hpp"
13 
14 DETAIL_PHI_BEGIN_NAMESPACE()
15 
16 template <typename TypeT>
17 struct is_void : public false_type
18 {};
19 
20 template <>
21 struct is_void<void> : public true_type
22 {};
23 
24 template <>
25 struct is_void<const void> : public true_type
26 {};
27 
28 template <>
29 struct is_void<volatile void> : public true_type
30 {};
31 
32 template <>
33 struct is_void<const volatile void> : public true_type
34 {};
35 
36 template <typename TypeT>
37 struct is_not_void : public integral_constant<bool, !is_void<TypeT>::value>
38 {};
39 
40 #if PHI_HAS_FEATURE_VARIABLE_TEMPLATE()
41 
42 template <typename TypeT>
43 PHI_INLINE_VARIABLE PHI_CONSTEXPR bool is_void_v = is_void<TypeT>::value;
44 
45 template <typename TypeT>
46 PHI_INLINE_VARIABLE PHI_CONSTEXPR bool is_not_void_v = is_not_void<TypeT>::value;
47 
48 #endif
49 
50 DETAIL_PHI_END_NAMESPACE()
51 
52 #endif // INCG_PHI_CORE_TYPE_TRAITS_IS_VOID_HPP
Definition: integral_constant.hpp:19
Definition: is_void.hpp:37
Definition: is_void.hpp:17