10 #ifndef LLVM_ADT_ILIST_NODE_OPTIONS_H 11 #define LLVM_ADT_ILIST_NODE_OPTIONS_H 13 #include "llvm/Config/abi-breaking.h" 15 #include <type_traits> 19 template <
bool EnableSentinelTracking>
class ilist_node_base;
20 template <
bool EnableSentinelTracking>
class ilist_base;
35 namespace ilist_detail {
62 template <
bool EnableSentinelTracking,
class... Options>
65 : std::integral_constant<bool, EnableSentinelTracking>, is_explicit {};
66 template <
class Option1,
class... Options>
69 #if LLVM_ENABLE_ABI_BREAKING_CHECKS 75 template <
bool EnableSentinelTracking>
84 template <
class Tag,
class... Options>
88 template <
class Option1,
class... Options>
98 template <
class Option1,
class... Options>
100 : std::integral_constant<bool, is_valid_option<Option1>::value &&
101 check_options<Options...>::value> {};
106 template <
class T,
bool EnableSentinelTracking,
bool IsSentinelTrackingExplicit,
115 static const bool enable_sentinel_tracking = EnableSentinelTracking;
116 static const bool is_sentinel_tracking_explicit = IsSentinelTrackingExplicit;
132 #endif // LLVM_ADT_ILIST_NODE_OPTIONS_H Check whether an option is valid.
This class represents lattice values for constants.
explicitness< false > is_implicit
node_options< T, extract_sentinel_tracking< Options... >::value, extract_sentinel_tracking< Options... >::is_explicit, typename extract_tag< Options... >::type > type
explicitness< true > is_explicit
const T & const_reference
Base class for ilist nodes.
Option to choose whether to track sentinels.
ilist_node_base< enable_sentinel_tracking > node_base_type
Check whether options are valid.
Option to specify a tag for the node type.
ilist_base< enable_sentinel_tracking > list_base_type
Helper trait for recording whether an option is specified explicitly.
Implementations of list algorithms using ilist_node_base.
Traits for options for ilist_node.