+ /// Stack node
+ /**
+ Template parameters:
+ - GC - garbage collector used
+ - Tag - a tag used to distinguish between different type
+ */
+ template <class GC, typename Tag = opt::none >
+ using node = cds::intrusive::single_link::node< GC, Tag > ;
+
+ /// Base hook
+ /**
+ \p Options are:
+ - opt::gc - garbage collector used.
+ - opt::tag - tag
+ */
+ template < typename... Options >
+ using base_hook = cds::intrusive::single_link::base_hook< Options...>;
+
+ /// Member hook
+ /**
+ \p MemberOffset specifies offset in bytes of \ref node member into your structure.
+ Use \p offsetof macro to define \p MemberOffset
+
+ \p Options are:
+ - opt::gc - garbage collector used.
+ - opt::tag - tag
+ */
+ template < size_t MemberOffset, typename... Options >
+ using member_hook = cds::intrusive::single_link::member_hook< MemberOffset, Options... >;
+
+ /// Traits hook
+ /**
+ \p NodeTraits defines type traits for node.
+ See \ref node_traits for \p NodeTraits interface description
+
+ \p Options are:
+ - opt::gc - garbage collector used.
+ - opt::tag - tag
+ */
+ template <typename NodeTraits, typename... Options >
+ using traits_hook = cds::intrusive::single_link::traits_hook< NodeTraits, Options... >;
+
+ /// TreiberStack default type traits
+ struct traits
+ {
+ typedef cds::backoff::Default back_off; ///< Back-off strategy
+ typedef treiber_stack::base_hook<> hook; ///< Hook used
+ typedef opt::v::empty_disposer disposer; ///< Node disposer
+ typedef atomicity::empty_item_counter item_counter; ///< Item counting feature (by default, disabled)
+ typedef opt::v::relaxed_ordering memory_model; ///< Memory model (by default, relaxed)
+ typedef treiber_stack::empty_stat stat; ///< Internal statistics (by default, no internal statistics)
+ static CDS_CONSTEXPR_CONST opt::link_check_type link_checker = opt::debug_check_link; ///< Link checking, see cds::opt::link_checker
+
+ // Elimination back-off options
+ static CDS_CONSTEXPR_CONST bool enable_elimination = false; ///< Enable elimination (by default, it is disabled)
+ typedef cds::backoff::delay<> elimination_backoff; ///< Back-off strategy for elimination
+ typedef opt::v::static_buffer< int, 4 > buffer; ///< Elimination buffer type
+ typedef opt::v::c_rand random_engine; ///< Random number generator for elimination
+ typedef cds::lock::Spin lock_type; ///< Lock type for elimitation
+ };
+