$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82133 - in sandbox/tree_node: boost/tree_node boost/tree_node/typeof libs/tree_node/example libs/tree_node/test
From: sponage_at_[hidden]
Date: 2012-12-20 22:42:33
Author: expaler
Date: 2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
New Revision: 82133
URL: http://svn.boost.org/trac/boost/changeset/82133
Log:
Boost.TreeNode: added with_accumulation and key-based access.
Added:
   sandbox/tree_node/boost/tree_node/accumulation_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/associative_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/base.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/binary_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/count_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/data_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/height_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/nary_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/position_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/preprocessor.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/red_black_flag_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/accumulation_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/count_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/data_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/height_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/position_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/red_black_flag_key.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/with_accumulation.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/with_count.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/with_height.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/with_position.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/with_red_black_flag.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/with_accumulation.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/with_count.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/with_height.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/with_position.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/with_red_black_flag.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/assoc_iterator_functions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/associative_node.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/binary_node.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/iterator_functions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/match_predicate.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/nary_node.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/output_functions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/output_preamble.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/output_preamble.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/output_tabs.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/output_tabs.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/type_definitions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/test/associative_node.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/test/binary_node.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/test/iterator_functions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/test/nary_node.cpp   (contents, props changed)
Removed:
   sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.cpp
   sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.hpp
   sandbox/tree_node/libs/tree_node/example/show_functions.cpp
   sandbox/tree_node/libs/tree_node/example/show_functions.hpp
   sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp
   sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp
Added: sandbox/tree_node/boost/tree_node/accumulation_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/accumulation_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,35 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_ACCUMULATION_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_ACCUMULATION_KEY_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/accumulators/statistics/sum.hpp>
+#include <boost/tree_node/data_key.hpp>
+
+//[reference__accumulation_key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key = data_key
+      , typename Tag = ::boost::accumulators::tag::sum
+      , typename IncludesAllDescendants = ::boost::mpl::true_
+      , typename IncludesRoot = ::boost::mpl::true_
+      , typename Value = void
+    >
+    struct accumulation_key
+    {
+        typedef Key key;
+        typedef Tag tag;
+        typedef IncludesAllDescendants includes_all_descendants;
+        typedef IncludesRoot includes_root;
+        typedef Value value;
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_ACCUMULATION_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/associative_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/associative_node.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1465 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_ASSOCIATIVE_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_assoc_function_gen.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_recursive_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/tree_node/data_key.hpp>
+#include <boost/assert.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+//[reference__associative_node_base__put
+namespace boost { namespace tree_node {
+
+    //<-
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    class associative_node_base;
+    //->
+
+    template <
+        typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+      , typename V
+    >
+    void
+        put(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , data_key const& key
+          , V const& value
+        );
+}}  // namespace boost::tree_node
+//]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+      , typename FusionKey
+    >
+    struct has_key_impl<
+        associative_node_base<Derived,Key,Data,Selector>
+      , FusionKey
+    > : ::boost::fusion::result_of::has_key<Data,FusionKey>
+    {
+    };
+}}  // namespace boost::tree_node
+
+//[reference__associative_node_base__put__fusion
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+      , typename FusionKey
+      , typename V
+    >
+    void
+        put(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<Data>::type
+                , ::boost::fusion::traits::is_associative<Data>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  associative_node_base<Derived,Key,Data,Selector>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type = ::boost::mpl::true_()
+        );
+}}  // namespace boost::tree_node
+//]
+#endif
+
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    class associative_node_base
+      : public
+        //[reference__associative_node_base__bases
+        tree_node_base<Derived>
+        //]
+      , private ::boost::noncopyable
+    {
+        BOOST_MPL_ASSERT((::boost::is_associative_selector<Selector>));
+        BOOST_MPL_ASSERT((::boost::is_recursive_selector<Selector>));
+
+        typedef typename ::boost::container_gen<Selector,Key,Derived>::type
+                children;
+
+     public:
+        //[reference__associative_node_base__super_t
+        typedef tree_node_base<Derived>
+                super_t;
+        //]
+
+        //[reference__associative_node_base__pointer
+        typedef typename super_t::pointer
+                pointer;
+        //]
+
+        //[reference__associative_node_base__const_pointer
+        typedef typename super_t::const_pointer
+                const_pointer;
+        //]
+
+        //[reference__associative_node_base__iterator
+        typedef // implementation_defined
+                //<-
+                typename children::iterator
+                //->
+                iterator;
+        //]
+
+        //[reference__associative_node_base__const_iterator
+        typedef // implementation_defined
+                //<-
+                typename children::const_iterator
+                //->
+                const_iterator;
+        //]
+
+        //[reference__associative_node_base__size_type
+        typedef // implementation_defined
+                //<-
+                typename children::size_type
+                //->
+                size_type;
+        //]
+
+        //[reference__associative_node_base__traits
+        struct traits
+        {
+            typedef Key key_type;
+            typedef Data data_type;
+            typedef typename ::boost::mpl::if_<
+                        ::boost::is_ptr_selector<Selector>
+                      , ::boost::iterator_range<iterator>
+                      , ::std::pair<iterator,iterator>
+                    >::type
+                    iterator_range;
+            typedef typename ::boost::mpl::if_<
+                        ::boost::is_ptr_selector<Selector>
+                      , ::boost::iterator_range<const_iterator>
+                      , ::std::pair<const_iterator,const_iterator>
+                    >::type
+                    const_iterator_range;
+        };
+        //]
+
+     private:
+        children                   _children;
+        typename traits::data_type _data;
+        pointer                    _parent;
+
+     protected:
+        //[reference__associative_node_base__derived_copy_ctor
+        associative_node_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        associative_node_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__associative_node_base__emplacement_ctor
+        template <typename ...Args>
+        explicit associative_node_base(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL
+          , associative_node_base
+        )
+#endif
+
+        ~associative_node_base();
+
+        //[reference__associative_node_base__on_post_copy_or_move
+        void on_post_copy_or_move();
+        //]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        //[reference__associative_node_base__copy_assign
+        void copy_assign(Derived const& copy);
+        //]
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+     public:
+        //[reference__associative_node_base__key_value_operator__const
+        typename traits::data_type const& operator[](data_key const&) const;
+        //]
+
+        //[reference__associative_node_base__key_value_operator
+        typename traits::data_type& operator[](data_key const&);
+        //]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        //[reference__associative_node_base__fusion_key_value_operator__const
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<Data>::type
+                  , ::boost::fusion::traits::is_associative<Data>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    associative_node_base<Derived,Key,Data,Selector>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<Data const,FusionKey>
+        >::type
+            operator[](FusionKey const&) const;
+        //]
+
+        //[reference__associative_node_base__fusion_key_value_operator
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<Data>::type
+                  , ::boost::fusion::traits::is_associative<Data>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    associative_node_base<Derived,Key,Data,Selector>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<Data,FusionKey>
+        >::type
+            operator[](FusionKey const&);
+        //]
+#endif
+
+        //[reference__associative_node_base__get_parent_ptr__const
+        const_pointer get_parent_ptr() const;
+        //]
+
+        //[reference__associative_node_base__get_parent_ptr
+        pointer get_parent_ptr();
+        //]
+
+        //[reference__associative_node_base__insert
+        iterator
+            insert(
+                typename traits::key_type const& key
+              , Derived const& child
+            );
+        //]
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__associative_node_base__emplace
+        template <typename ...Args>
+        iterator emplace(typename traits::key_type const& key, Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO(z, n, _)                      \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            emplace(                                                         \
+                typename traits::key_type const& key                         \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        //[reference__associative_node_base__begin__const
+        const_iterator begin() const;
+        //]
+
+        //[reference__associative_node_base__begin
+        iterator begin();
+        //]
+
+        //[reference__associative_node_base__end__const
+        const_iterator end() const;
+        //]
+
+        //[reference__associative_node_base__end
+        iterator end();
+        //]
+
+        //[reference__associative_node_base__size
+        size_type size() const;
+        //]
+
+        //[reference__associative_node_base__empty
+        bool empty() const;
+        //]
+
+        //[reference__associative_node_base__clear
+        void clear();
+        //]
+
+        //[reference__associative_node_base__find__const
+        const_iterator find(typename traits::key_type const& key) const;
+        //]
+
+        //[reference__associative_node_base__find
+        iterator find(typename traits::key_type const& key);
+        //]
+
+        //[reference__associative_node_base__equal_range__const
+        typename traits::const_iterator_range
+            equal_range(typename traits::key_type const& key) const;
+        //]
+
+        //[reference__associative_node_base__equal_range
+        typename traits::iterator_range
+            equal_range(typename traits::key_type const& key);
+        //]
+
+        //[reference__associative_node_base__erase
+        size_type erase(typename traits::key_type const& key);
+        //]
+
+     private:
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename ...Args>
+        iterator
+            _add_child(typename traits::key_type const& key, Args&& ...args);
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO(z, n, _)                      \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            _add_child(                                                      \
+                typename traits::key_type const& key                         \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        void _initialize(iterator& itr);
+
+        void _link_children_to_parent();
+
+        void _on_post_modify_value(data_key const& key);
+
+        template <typename D, typename K, typename T, typename S, typename V>
+        friend void
+            put(
+                associative_node_base<D,K,T,S>& node
+              , data_key const& key
+              , V const& value
+            );
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        template <typename FusionKey>
+        void _on_post_modify_value(FusionKey const& key);
+
+        template <
+            typename D
+          , typename K
+          , typename T
+          , typename S
+          , typename FusionKey
+          , typename V
+        >
+        friend void
+          put(
+            associative_node_base<D,K,T,S>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T>::type
+                , ::boost::fusion::traits::is_associative<T>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  associative_node_base<D,K,T,S>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+          );
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+    };
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    associative_node_base<Derived,Key,Data,Selector>::associative_node_base(
+        Derived const& copy
+    ) : _children(copy._children)
+      , _data(copy._data)
+      , _parent(copy._parent)
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    associative_node_base<Derived,Key,Data,Selector>::associative_node_base(
+        BOOST_RV_REF(Derived) source
+    ) : _children(::boost::move(source._children))
+      , _data(::boost::move(source._data))
+      , _parent(source._parent)
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename ...Args>
+    associative_node_base<Derived,Key,Data,Selector>::associative_node_base(
+        Args&& ...args
+    ) : _children(), _data(::boost::forward<Args>(args)...), _parent()
+    {
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO(z, n, _)                      \
+    template <                                                               \
+        typename Derived                                                     \
+      , typename Key                                                         \
+      , typename Data                                                        \
+      , typename Selector                                                    \
+    >                                                                        \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    associative_node_base<Derived,Key,Data,Selector>::associative_node_base( \
+        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                     \
+            n                                                                \
+          , BOOST_CONTAINER_PP_PARAM_LIST                                    \
+          , _                                                                \
+        )                                                                    \
+    ) : _children()                                                          \
+      , _data(                                                               \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+      , _parent()                                                            \
+    {                                                                        \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    associative_node_base<Derived,Key,Data,Selector>::~associative_node_base()
+    {
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline void
+        associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::on_post_copy_or_move()
+    {
+        this->_link_children_to_parent();
+        this->on_post_propagate_value(data_key());
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    void
+        associative_node_base<Derived,Key,Data,Selector>::copy_assign(
+            Derived const& copy
+        )
+    {
+        Derived twin(copy);
+
+        this->_children = twin._children;
+        this->_data = twin._data;
+    }
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    void
+        associative_node_base<Derived,Key,Data,Selector>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+    {
+        Derived twin(static_cast<Derived const&>(copy));
+
+        this->_children = ::boost::move(twin._children);
+        this->_data = ::boost::move(twin._data);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline void
+        associative_node_base<Derived,Key,Data,Selector>::move_assign(
+            BOOST_RV_REF(Derived) source
+        )
+    {
+        this->_children = ::boost::move(source._children);
+        this->_data = ::boost::move(source._data);
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type const&
+        associative_node_base<Derived,Key,Data,Selector>::operator[](
+            data_key const&
+        ) const
+    {
+        return this->_data;
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type&
+        associative_node_base<Derived,Key,Data,Selector>::operator[](
+            data_key const&
+        )
+    {
+        return this->_data;
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data const,FusionKey>
+    >::type
+        associative_node_base<Derived,Key,Data,Selector>::operator[](
+            FusionKey const&
+        ) const
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data,FusionKey>
+    >::type
+        associative_node_base<Derived,Key,Data,Selector>::operator[](
+            FusionKey const&
+        )
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::const_pointer
+        associative_node_base<Derived,Key,Data,Selector>::get_parent_ptr() const
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::pointer
+        associative_node_base<Derived,Key,Data,Selector>::get_parent_ptr()
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::insert(
+            typename traits::key_type const& key
+          , Derived const& child
+        )
+    {
+#if defined BOOST_MSVC
+        Derived twin(child);
+        iterator result(this->_add_child(key, twin));
+#else
+        iterator result(this->_add_child(key, Derived(child)));
+#endif
+        BOOST_ASSERT(
+            ::boost::tree_node::dereference_iterator(
+                result
+            )._parent == this->get_derived()
+        );
+        return result;
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename ...Args>
+    typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::emplace(
+            typename traits::key_type const& key
+          , Args&& ...args
+        )
+    {
+        iterator result(
+            this->_add_child(key, ::boost::forward<Args>(args)...)
+        );
+        BOOST_ASSERT(
+            ::boost::tree_node::dereference_iterator(
+                result
+            )._parent == this->get_derived()
+        );
+        return result;
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO(z, n, _)                      \
+    template <                                                               \
+        typename Derived                                                     \
+      , typename Key                                                         \
+      , typename Data                                                        \
+      , typename Selector                                                    \
+    >                                                                        \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    typename associative_node_base<Derived,Key,Data,Selector>::iterator      \
+        associative_node_base<Derived,Key,Data,Selector>::emplace(           \
+            typename traits::key_type const& key                             \
+            BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                        \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        iterator result = this->_add_child(                                  \
+            key                                                              \
+            BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                        \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        );                                                                   \
+        BOOST_ASSERT(                                                        \
+            ::boost::tree_node::dereference_iterator(                        \
+                result                                                       \
+            )._parent == this->get_derived()                                 \
+        );                                                                   \
+        return result;                                                       \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::const_iterator
+        associative_node_base<Derived,Key,Data,Selector>::begin() const
+    {
+        return this->_children.begin();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::begin()
+    {
+        return this->_children.begin();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::const_iterator
+        associative_node_base<Derived,Key,Data,Selector>::end() const
+    {
+        return this->_children.end();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::end()
+    {
+        return this->_children.end();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::size_type
+        associative_node_base<Derived,Key,Data,Selector>::size() const
+    {
+        return this->_children.size();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline bool associative_node_base<Derived,Key,Data,Selector>::empty() const
+    {
+        return this->_children.empty();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline void associative_node_base<Derived,Key,Data,Selector>::clear()
+    {
+        this->_children.clear();
+        this->on_post_clear();
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::const_iterator
+        associative_node_base<Derived,Key,Data,Selector>::find(
+            typename traits::key_type const& key
+        ) const
+    {
+        return this->_children.find(key);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::find(
+            typename traits::key_type const& key
+        )
+    {
+        return this->_children.find(key);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::const_iterator_range
+        associative_node_base<Derived,Key,Data,Selector>::equal_range(
+            typename traits::key_type const& key
+        ) const
+    {
+        return this->_children.equal_range(key);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::iterator_range
+        associative_node_base<Derived,Key,Data,Selector>::equal_range(
+            typename traits::key_type const& key
+        )
+    {
+        return this->_children.equal_range(key);
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    typename associative_node_base<Derived,Key,Data,Selector>::size_type
+        associative_node_base<Derived,Key,Data,Selector>::erase(
+            typename traits::key_type const& key
+        )
+    {
+        size_type result = this->_children.erase(key);
+        this->on_post_erase();
+        return result;
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename ...Args>
+    typename associative_node_base<Derived,Key,Data,Selector>::iterator
+        associative_node_base<Derived,Key,Data,Selector>::_add_child(
+            typename traits::key_type const& key
+          , Args&& ...args
+        )
+    {
+        typename ::boost::emplace_associative_function_gen<Selector>::type
+            emplacer;
+        ::std::pair<iterator,bool> p = emplacer(
+            this->_children
+          , key
+          , ::boost::forward<Args>(args)...
+        );
+
+        if (p.second)
+        {
+            this->_initialize(p.first);
+        }
+
+        return p.first;
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO(z, n, _)                      \
+    template <                                                               \
+        typename Derived                                                     \
+      , typename Key                                                         \
+      , typename Data                                                        \
+      , typename Selector                                                    \
+    >                                                                        \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    typename associative_node_base<Derived,Key,Data,Selector>::iterator      \
+        associative_node_base<Derived,Key,Data,Selector>::_add_child(        \
+            typename traits::key_type const& key                             \
+            BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                        \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        typename ::boost::emplace_associative_function_gen<Selector>::type   \
+            emplacer;                                                        \
+        ::std::pair<iterator,bool> p = emplacer(                             \
+            this->_children                                                  \
+          , key                                                              \
+            BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                        \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        );                                                                   \
+        if (p.second)                                                        \
+        {                                                                    \
+            this->_initialize(p.first);                                      \
+        }                                                                    \
+        return p.first;                                                      \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_ASSOCIATIVE_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline void
+        associative_node_base<Derived,Key,Data,Selector>::_initialize(
+            iterator& itr
+        )
+    {
+        Derived& child = ::boost::tree_node::dereference_iterator(itr);
+
+        child._parent = this->get_derived();
+        child.on_post_inserted(
+            itr
+          , ::boost::has_stable_iterators_selector<Selector>()
+        );
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    void
+        associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::_link_children_to_parent()
+    {
+        iterator itr_end = this->end();
+
+        for (iterator itr = this->begin(); itr != itr_end; ++itr)
+        {
+            ::boost::tree_node::dereference_iterator(
+                itr
+            )._parent = this->get_derived();
+        }
+    }
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline void
+        associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::_on_post_modify_value(data_key const& key)
+    {
+        this->on_post_modify_value(key);
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    template <typename FusionKey>
+    inline void
+        associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::_on_post_modify_value(FusionKey const& key)
+    {
+        this->on_post_modify_value(key);
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__associative_node_base__get__const
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type const&
+        get(
+            associative_node_base<Derived,Key,Data,Selector> const& node
+          , data_key const& key
+        );
+
+    //<-
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type const&
+        get(
+            associative_node_base<Derived,Key,Data,Selector> const& node
+          , data_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__associative_node_base__get
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type&
+        get(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , data_key const& key
+        );
+
+    //<-
+    template <typename Derived, typename Key, typename Data, typename Selector>
+    inline typename associative_node_base<
+        Derived
+      , Key
+      , Data
+      , Selector
+    >::traits::data_type&
+        get(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , data_key const& key
+        )
+    {
+        return node[key];
+    }
+
+    template <
+        typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+      , typename V
+    >
+    inline void
+        put(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , data_key const& key
+          , V const& value
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__associative_node_base__get__key__const
+namespace boost { namespace tree_node {
+
+    template <
+        typename DataKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<DataKey,data_key>
+      , typename associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::traits::data_type const&
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector> const& node);
+
+    //<-
+    template <
+        typename DataKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<DataKey,data_key>
+      , typename associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::traits::data_type const&
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector> const& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__associative_node_base__get__key
+namespace boost { namespace tree_node {
+
+    template <
+        typename DataKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<DataKey,data_key>
+      , typename associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::traits::data_type&
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector>& node);
+
+    //<-
+    template <
+        typename DataKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<DataKey,data_key>
+      , typename associative_node_base<
+            Derived
+          , Key
+          , Data
+          , Selector
+        >::traits::data_type&
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector>& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+//[reference__associative_node_base__get__fusion__const
+namespace boost { namespace tree_node {
+
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data const,FusionKey>
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector> const& node);
+
+    //<-
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data const,FusionKey>
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector> const& node)
+    {
+        return node[FusionKey()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__associative_node_base__get__fusion
+namespace boost { namespace tree_node {
+
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data,FusionKey>
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector>& node);
+
+    //<-
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+    >
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<Data>::type
+              , ::boost::fusion::traits::is_associative<Data>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                associative_node_base<Derived,Key,Data,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<Data,FusionKey>
+    >::type
+        get(associative_node_base<Derived,Key,Data,Selector>& node)
+    {
+        return node[FusionKey()];
+    }
+
+    template <
+        typename Derived
+      , typename Key
+      , typename Data
+      , typename Selector
+      , typename FusionKey
+      , typename V
+    >
+    inline void
+        put(
+            associative_node_base<Derived,Key,Data,Selector>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<Data>::type
+                , ::boost::fusion::traits::is_associative<Data>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  associative_node_base<Derived,Key,Data,Selector>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Data
+      , typename Selector = ::boost::ptr_mapS
+    >
+    struct associative_node
+      : public
+        //[reference__associative_node__bases
+        associative_node_base<
+            associative_node<Key,Data,Selector>
+          , Key
+          , Data
+          , Selector
+        >
+        //]
+    {
+        //[reference__associative_node__super_t
+        typedef associative_node_base<
+                    associative_node
+                  , Key
+                  , Data
+                  , Selector
+                >
+                super_t;
+        //]
+
+        //[reference__associative_node__traits
+        typedef typename super_t::traits
+                traits;
+        //]
+
+        //[reference__associative_node__pointer
+        typedef typename super_t::pointer
+                pointer;
+        //]
+
+        //[reference__associative_node__const_pointer
+        typedef typename super_t::const_pointer
+                const_pointer;
+        //]
+
+        //[reference__associative_node__iterator
+        typedef typename super_t::iterator
+                iterator;
+        //]
+
+        //[reference__associative_node__const_iterator
+        typedef typename super_t::const_iterator
+                const_iterator;
+        //]
+
+        //[reference__associative_node__size_type
+        typedef typename super_t::size_type
+                size_type;
+        //]
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(associative_node, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__associative_node__emplacement_ctor
+        template <typename ...Args>
+        explicit associative_node(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (associative_node, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Key, typename Data, typename Selector>
+    template <typename ...Args>
+    inline associative_node<Key,Data,Selector>::associative_node(
+        Args&& ...args
+    ) : super_t(::boost::forward<Args>(args)...)
+    {
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__associative_node_gen
+namespace boost { namespace tree_node {
+
+    template <typename Selector = ::boost::ptr_mapS>
+    struct associative_node_gen
+    {
+        template <typename Derived, typename Key, typename Data>
+        struct apply
+        {
+            typedef associative_node_base<Derived,Key,Data,Selector> type;
+        };
+    };
+
+    typedef associative_node_gen<> associative_node_default_gen;
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_ASSOCIATIVE_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/base.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/base.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,279 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_BASE_HPP_INCLUDED
+#define BOOST_TREE_NODE_BASE_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/base_pointee.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/data_key.hpp>
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+//[reference__tree_node__has_key
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename Key>
+    struct has_key_impl : has_key_impl<typename Node::super_t,Key>
+    {
+    };
+
+    template <typename Key>
+    struct has_key_impl<void,Key> : ::boost::mpl::false_
+    {
+    };
+
+    template <typename Node>
+    struct has_key_impl<Node,data_key> : ::boost::mpl::true_
+    {
+    };
+
+    template <typename Node, typename Key>
+    struct has_key : has_key_impl<Node,Key>::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(2,has_key,(Node,Key))
+    };
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node {
+
+    template <typename Derived>
+    struct tree_node_base
+      : public ::boost::detail::base_pointee<Derived>
+    {
+        typedef typename ::boost::detail::base_pointee<Derived>::pointer
+                pointer;
+        typedef typename ::boost::detail::base_pointee<Derived>::const_pointer
+                const_pointer;
+        typedef void
+                super_t;
+
+     protected:
+        ~tree_node_base();
+
+        //[reference__tree_node_base__on_post_emplacement_construct
+        void on_post_emplacement_construct();
+        //]
+
+        //[reference__tree_node_base__on_post_modify_value_impl
+        template <typename Key>
+        void on_post_modify_value_impl(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_modify_value
+        template <typename Key>
+        void on_post_modify_value(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_propagate_value_impl
+        template <typename Key>
+        void on_post_propagate_value_impl(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_propagate_value
+        template <typename Key>
+        void on_post_propagate_value(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_propagate_value_once_impl
+        template <typename Key>
+        void on_post_propagate_value_once_impl(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_propagate_value_once
+        template <typename Key>
+        void on_post_propagate_value_once(Key const& key);
+        //]
+
+        //[reference__tree_node_base__on_post_inserted_impl__true
+        template <typename Iterator>
+        void on_post_inserted_impl(Iterator position, ::boost::mpl::true_);
+        //]
+
+        //[reference__tree_node_base__on_post_inserted_impl__false
+        template <typename Iterator>
+        void on_post_inserted_impl(Iterator position, ::boost::mpl::false_);
+        //]
+
+        //[reference__tree_node_base__on_post_inserted
+        template <typename Iterator, typename BooleanIntegralConstant>
+        void
+            on_post_inserted(
+                Iterator position
+              , BooleanIntegralConstant invalidates_sibling_positions
+            );
+        //]
+
+        //[reference__tree_node_base__on_post_erase_impl
+        void on_post_erase_impl();
+        //]
+
+        //[reference__tree_node_base__on_post_erase
+        void on_post_erase();
+        //]
+
+        //[reference__tree_node_base__on_post_clear_impl
+        void on_post_clear_impl();
+        //]
+
+        //[reference__tree_node_base__on_post_clear
+        void on_post_clear();
+        //]
+
+        //[reference__tree_node_base__on_post_rotate_left_impl
+        void on_post_rotate_left_impl();
+        //]
+
+        //[reference__tree_node_base__on_post_rotate_left
+        void on_post_rotate_left();
+        //]
+
+        //[reference__tree_node_base__on_post_rotate_right_impl
+        void on_post_rotate_right_impl();
+        //]
+
+        //[reference__tree_node_base__on_post_rotate_right
+        void on_post_rotate_right();
+        //]
+    };
+
+    template <typename Derived>
+    tree_node_base<Derived>::~tree_node_base()
+    {
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_emplacement_construct()
+    {
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void tree_node_base<Derived>::on_post_modify_value_impl(Key const&)
+    {
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void tree_node_base<Derived>::on_post_modify_value(Key const& key)
+    {
+        this->get_derived()->on_post_modify_value_impl(key);
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void
+        tree_node_base<Derived>::on_post_propagate_value_impl(Key const&)
+    {
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void
+        tree_node_base<Derived>::on_post_propagate_value(Key const& key)
+    {
+        this->get_derived()->on_post_propagate_value_impl(key);
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void
+        tree_node_base<Derived>::on_post_propagate_value_once_impl(Key const&)
+    {
+    }
+
+    template <typename Derived>
+    template <typename Key>
+    inline void
+        tree_node_base<Derived>::on_post_propagate_value_once(Key const& key)
+    {
+        this->get_derived()->on_post_propagate_value_once_impl(key);
+    }
+
+    template <typename Derived>
+    template <typename Iterator>
+    inline void
+        tree_node_base<Derived>::on_post_inserted_impl(
+            Iterator position
+          , ::boost::mpl::true_
+        )
+    {
+    }
+
+    template <typename Derived>
+    template <typename Iterator>
+    inline void
+        tree_node_base<Derived>::on_post_inserted_impl(
+            Iterator position
+          , ::boost::mpl::false_
+        )
+    {
+    }
+
+    template <typename Derived>
+    template <typename Iterator, typename BooleanIntegralConstant>
+    inline void
+        tree_node_base<Derived>::on_post_inserted(
+            Iterator position
+          , BooleanIntegralConstant invalidates_sibling_positions
+        )
+    {
+        this->get_derived()->on_post_inserted_impl(
+            position
+          , invalidates_sibling_positions
+        );
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_erase_impl()
+    {
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_erase()
+    {
+        this->get_derived()->on_post_erase_impl();
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_clear_impl()
+    {
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_clear()
+    {
+        this->get_derived()->on_post_clear_impl();
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_rotate_left_impl()
+    {
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_rotate_left()
+    {
+        this->get_derived()->on_post_rotate_left_impl();
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_rotate_right_impl()
+    {
+    }
+
+    template <typename Derived>
+    inline void tree_node_base<Derived>::on_post_rotate_right()
+    {
+        this->get_derived()->on_post_rotate_right_impl();
+    }
+}}  // namespace boost::tree_node
+
+#endif  // BOOST_TREE_NODE_BASE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/binary_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/binary_node.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1452 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_BINARY_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_BINARY_NODE_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/depth_first_desc_iterator.hpp>
+#include <boost/tree_node/data_key.hpp>
+#include <boost/assert.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+//[reference__binary_node_base__put
+namespace boost { namespace tree_node {
+
+    //<-
+    template <typename Derived, typename T>
+    class binary_node_base;
+    //->
+
+    template <typename Derived, typename T, typename V>
+    void
+        put(
+            binary_node_base<Derived,T>& node
+          , data_key const& key
+          , V const& value
+        );
+}}  // namespace boost::tree_node
+//]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T, typename FusionKey>
+    struct has_key_impl<binary_node_base<Derived,T>,FusionKey>
+      : ::boost::fusion::result_of::has_key<T,FusionKey>
+    {
+    };
+}}  // namespace boost::tree_node
+
+//[reference__binary_node_base__put__fusion
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T, typename FusionKey, typename V>
+    void
+        put(
+            binary_node_base<Derived,T>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T>::type
+                , ::boost::fusion::traits::is_associative<T>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  binary_node_base<Derived,T>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type = ::boost::mpl::true_()
+        );
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node { namespace _detail {
+
+    template <typename Node>
+    class binary_child_iterator
+    {
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:
+        typedef ::std::bidirectional_iterator_tag iterator_category;
+        typedef Node value_type;
+        typedef ::std::ptrdiff_t difference_type;
+        typedef value_type* pointer;
+        typedef value_type& reference;
+
+//     private:
+        pointer _current;
+
+     public:
+        binary_child_iterator();
+
+        binary_child_iterator(pointer const& p, bool p_is_child);
+
+        template <typename N>
+        binary_child_iterator(
+            binary_child_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+        );
+
+        reference operator*() const;
+
+        pointer operator->() const;
+
+        binary_child_iterator& operator++();
+
+        binary_child_iterator operator++(int);
+
+        binary_child_iterator& operator--();
+
+        binary_child_iterator operator--(int);
+
+     private:
+        void _iterate(pointer const& sibling);
+
+        template <typename N1, typename N2>
+        friend bool
+            operator==(
+                binary_child_iterator<N1> const& lhs
+              , binary_child_iterator<N2> const& rhs
+            );
+    };
+
+    template <typename Node>
+    binary_child_iterator<Node>::binary_child_iterator() : _current(0)
+    {
+    }
+
+    template <typename Node>
+    binary_child_iterator<Node>::binary_child_iterator(
+        pointer const& p
+      , bool p_is_child
+    ) : _current(
+        p_is_child
+      ? p
+      : p->get_left_child_ptr()
+      ? p->get_left_child_ptr()
+      : p->get_right_child_ptr()
+    )
+    {
+    }
+
+    template <typename Node>
+    template <typename N>
+    binary_child_iterator<Node>::binary_child_iterator(
+        binary_child_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : _current(other._current)
+    {
+    }
+
+    template <typename Node>
+    inline typename binary_child_iterator<Node>::reference
+        binary_child_iterator<Node>::operator*() const
+    {
+        return *this->_current;
+    }
+
+    template <typename Node>
+    inline typename binary_child_iterator<Node>::pointer
+        binary_child_iterator<Node>::operator->() const
+    {
+        return this->_current;
+    }
+
+    template <typename Node>
+    inline binary_child_iterator<Node>&
+        binary_child_iterator<Node>::operator++()
+    {
+        this->_iterate(
+            this->_current->get_parent_ptr()->get_right_child_ptr()
+        );
+        return *this;
+    }
+
+    template <typename Node>
+    binary_child_iterator<Node> binary_child_iterator<Node>::operator++(int)
+    {
+        binary_child_iterator itr(*this);
+        ++(*this);
+        return itr;
+    }
+
+    template <typename Node>
+    inline binary_child_iterator<Node>&
+        binary_child_iterator<Node>::operator--()
+    {
+        this->_iterate(this->_current->get_parent_ptr()->get_left_child_ptr());
+        return *this;
+    }
+
+    template <typename Node>
+    binary_child_iterator<Node> binary_child_iterator<Node>::operator--(int)
+    {
+        binary_child_iterator itr(*this);
+        --(*this);
+        return itr;
+    }
+
+    template <typename Node>
+    inline void binary_child_iterator<Node>::_iterate(pointer const& sibling)
+    {
+        this->_current = (this->_current == sibling) ? 0 : sibling;
+    }
+
+    template <typename N1, typename N2>
+    inline bool
+        operator==(
+            binary_child_iterator<N1> const& lhs
+          , binary_child_iterator<N2> const& rhs
+        )
+    {
+        return lhs._current == rhs._current;
+    }
+
+    template <typename N1, typename N2>
+    inline bool
+        operator!=(
+            binary_child_iterator<N1> const& lhs
+          , binary_child_iterator<N2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+}}}  // namespace boost::tree_node::_detail
+
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T>
+    class binary_node_base
+      : public
+        //[reference__binary_node_base__bases
+        tree_node_base<Derived>
+        //]
+      , private ::boost::noncopyable
+    {
+     public:
+        //[reference__binary_node_base__super_t
+        typedef tree_node_base<Derived>
+                super_t;
+        //]
+
+        //[reference__binary_node_base__traits
+        struct traits
+        {
+            typedef T data_type;
+        };
+        //]
+
+        //[reference__binary_node_base__pointer
+        typedef typename super_t::pointer
+                pointer;
+        //]
+
+        //[reference__binary_node_base__const_pointer
+        typedef typename super_t::const_pointer
+                const_pointer;
+        //]
+
+        //[reference__binary_node_base__iterator
+        typedef // implementation_defined
+                //<-
+                _detail::binary_child_iterator<Derived>
+                //->
+                iterator;
+        //]
+
+        //[reference__binary_node_base__const_iterator
+        typedef // implementation_defined
+                //<-
+                _detail::binary_child_iterator<Derived const>
+                //->
+                const_iterator;
+        //]
+
+        //[reference__binary_node_base__size_type
+        typedef ::boost::uint8_t
+                size_type;
+        //]
+
+     private:
+        typename traits::data_type _data;
+        pointer                    _left_child;
+        pointer                    _right_child;
+        pointer                    _parent;
+
+     protected:
+        //[reference__binary_node_base__derived_copy_ctor
+        binary_node_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        binary_node_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__binary_node_base__emplacement_ctor
+        template <typename ...Args>
+        explicit binary_node_base(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL
+          , binary_node_base
+        )
+#endif
+
+        ~binary_node_base();
+
+        //[reference__binary_node_base__on_post_copy_or_move
+        void on_post_copy_or_move();
+        //]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        //[reference__binary_node_base__copy_assign
+        void copy_assign(Derived const& copy);
+        //]
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+     public:
+        //[reference__binary_node_base__key_value_operator__const
+        typename traits::data_type const& operator[](data_key const&) const;
+        //]
+
+        //[reference__binary_node_base__key_value_operator
+        typename traits::data_type& operator[](data_key const&);
+        //]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        //[reference__binary_node_base__fusion_key_value_operator__const
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<T>::type
+                  , ::boost::fusion::traits::is_associative<T>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    binary_node_base<Derived,T>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<T const,FusionKey>
+        >::type
+            operator[](FusionKey const&) const;
+        //]
+
+        //[reference__binary_node_base__fusion_key_value_operator
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<T>::type
+                  , ::boost::fusion::traits::is_associative<T>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    binary_node_base<Derived,T>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<T,FusionKey>
+        >::type
+            operator[](FusionKey const&);
+        //]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+        //[reference__binary_node_base__get_parent_ptr__const
+        const_pointer get_parent_ptr() const;
+        //]
+
+        //[reference__binary_node_base__get_parent_ptr
+        pointer get_parent_ptr();
+        //]
+
+        //[reference__binary_node_base__insert_left
+        iterator insert_left(Derived const& child);
+        //]
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__binary_node_base__emplace_left
+        template <typename ...Args>
+        iterator emplace_left(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_BINARY_NODE_MACRO(z, n, _)                           \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            emplace_left(                                                    \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_BINARY_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_BINARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        //[reference__binary_node_base__insert_right
+        iterator insert_right(Derived const& child);
+        //]
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__binary_node_base__emplace_right
+        template <typename ...Args>
+        iterator emplace_right(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_BINARY_NODE_MACRO(z, n, _)                           \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            emplace_right(                                                   \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_BINARY_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_BINARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        //[reference__binary_node_base__get_left_child_ptr__const
+        const_pointer get_left_child_ptr() const;
+        //]
+
+        //[reference__binary_node_base__get_left_child_ptr
+        pointer get_left_child_ptr();
+        //]
+
+        //[reference__binary_node_base__get_right_child_ptr__const
+        const_pointer get_right_child_ptr() const;
+        //]
+
+        //[reference__binary_node_base__get_right_child_ptr
+        pointer get_right_child_ptr();
+        //]
+
+        //[reference__binary_node_base__begin__const
+        const_iterator begin() const;
+        //]
+
+        //[reference__binary_node_base__begin
+        iterator begin();
+        //]
+
+        //[reference__binary_node_base__end__const
+        const_iterator end() const;
+        //]
+
+        //[reference__binary_node_base__end
+        iterator end();
+        //]
+
+        //[reference__binary_node_base__size
+        size_type size() const;
+        //]
+
+        //[reference__binary_node_base__empty
+        bool empty() const;
+        //]
+
+        //[reference__binary_node_base__clear
+        void clear();
+        //]
+
+        //[reference__binary_node_base__rotate_left
+        pointer rotate_left();
+        //]
+
+        //[reference__binary_node_base__rotate_right
+        pointer rotate_right();
+        //]
+
+        //[reference__binary_node_base__erase_left
+        bool erase_left();
+        //]
+
+        //[reference__binary_node_base__erase_right
+        bool erase_right();
+        //]
+
+     private:
+        iterator _add_child(pointer const& child);
+
+        void _link_children_to_parent();
+
+        void _on_post_modify_value(data_key const& key);
+
+        template <typename D, typename T0, typename V>
+        friend void put(binary_node_base<D,T0>&, data_key const&, V const&);
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        template <typename FusionKey>
+        void _on_post_modify_value(FusionKey const& key);
+
+        template <typename D, typename T0, typename FusionKey, typename V>
+        friend void
+          put(
+            binary_node_base<D,T0>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T0>::type
+                , ::boost::fusion::traits::is_associative<T0>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<binary_node_base<D,T0>,FusionKey>
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+          );
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+    };
+
+    template <typename Derived, typename T>
+    binary_node_base<Derived,T>::binary_node_base(Derived const& copy)
+      : _data(copy._data)
+      , _left_child(copy._left_child ? new Derived(*copy._left_child) : 0)
+      , _right_child(copy._right_child ? new Derived(*copy._right_child) : 0)
+      , _parent()
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T>
+    binary_node_base<Derived,T>::binary_node_base(BOOST_RV_REF(Derived) source)
+      : _data(::boost::move(source._data))
+      , _left_child(source._left_child)
+      , _right_child(source._right_child)
+      , _parent()
+    {
+        source._left_child = source._right_child = 0;
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T>
+    template <typename ...Args>
+    binary_node_base<Derived,T>::binary_node_base(Args&& ...args)
+      : _data(::boost::forward<Args>(args)...)
+      , _left_child()
+      , _right_child()
+      , _parent()
+    {
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_BINARY_NODE_MACRO(z, n, _)                           \
+    template <typename Derived, typename T>                                  \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    binary_node_base<Derived,T>::binary_node_base(                           \
+        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                     \
+            n                                                                \
+          , BOOST_CONTAINER_PP_PARAM_LIST                                    \
+          , _                                                                \
+        )                                                                    \
+    ) : _data(                                                               \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+      , _left_child()                                                        \
+      , _right_child()                                                       \
+      , _parent()                                                            \
+    {                                                                        \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_BINARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_BINARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T>
+    binary_node_base<Derived,T>::~binary_node_base()
+    {
+        delete this->_left_child;
+        delete this->_right_child;
+    }
+
+    template <typename Derived, typename T>
+    inline void binary_node_base<Derived,T>::on_post_copy_or_move()
+    {
+        this->_link_children_to_parent();
+        this->on_post_modify_value(data_key());
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T>
+    void binary_node_base<Derived,T>::copy_assign(Derived const& copy)
+    {
+        Derived twin(copy);
+
+        delete this->_left_child;
+        delete this->_right_child;
+
+        this->_data = twin._data;
+        this->_left_child = twin._left_child;
+        this->_right_child = twin._right_child;
+        twin._left_child = twin._right_child = 0;
+    }
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T>
+    void
+        binary_node_base<Derived,T>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+    {
+        Derived twin(static_cast<Derived const&>(copy));
+
+        delete this->_left_child;
+        delete this->_right_child;
+
+        this->_data = ::boost::move(twin._data);
+        this->_left_child = twin._left_child;
+        this->_right_child = twin._right_child;
+        twin._left_child = twin._right_child = 0;
+    }
+
+    template <typename Derived, typename T>
+    void binary_node_base<Derived,T>::move_assign(BOOST_RV_REF(Derived) source)
+    {
+        delete this->_left_child;
+        delete this->_right_child;
+
+        this->_data = ::boost::move(source._data);
+        this->_left_child = source._left_child;
+        this->_right_child = source._right_child;
+        source._left_child = source._right_child = 0;
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::traits::data_type const&
+        binary_node_base<Derived,T>::operator[](data_key const&) const
+    {
+        return this->_data;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::traits::data_type&
+        binary_node_base<Derived,T>::operator[](data_key const&)
+    {
+        return this->_data;
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename T>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        binary_node_base<Derived,T>::operator[](FusionKey const&) const
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+
+    template <typename Derived, typename T>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        binary_node_base<Derived,T>::operator[](FusionKey const&)
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::const_pointer
+        binary_node_base<Derived,T>::get_parent_ptr() const
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::pointer
+        binary_node_base<Derived,T>::get_parent_ptr()
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename T>
+    typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::insert_left(Derived const& child)
+    {
+        if (this->_left_child)
+        {
+            return iterator(this->_left_child, true);
+        }
+        else
+        {
+            return this->_add_child(this->_left_child = new Derived(child));
+        }
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T>
+    template <typename ...Args>
+    typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::emplace_left(Args&& ...args)
+    {
+        if (this->_left_child)
+        {
+            return iterator(this->_left_child, true);
+        }
+        else
+        {
+            return this->_add_child(
+                this->_left_child = new Derived(
+                    ::boost::forward<Args>(args)...
+                )
+            );
+        }
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_BINARY_NODE_MACRO(z, n, _)                           \
+    template <typename Derived, typename T>                                  \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    typename binary_node_base<Derived,T>::iterator                           \
+        binary_node_base<Derived,T>::emplace_left(                           \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        if (this->_left_child)                                               \
+        {                                                                    \
+            return iterator(this->_left_child, true);                        \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+            return this->_add_child(                                         \
+                this->_left_child = new Derived(                             \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , _                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_BINARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_BINARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T>
+    typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::insert_right(Derived const& child)
+    {
+        if (this->_right_child)
+        {
+            return iterator(this->_right_child, true);
+        }
+        else
+        {
+            return this->_add_child(this->_right_child = new Derived(child));
+        }
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T>
+    template <typename ...Args>
+    typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::emplace_right(Args&& ...args)
+    {
+        if (this->_right_child)
+        {
+            return iterator(this->_right_child, true);
+        }
+        else
+        {
+            return this->_add_child(
+                this->_right_child = new Derived(
+                    ::boost::forward<Args>(args)...
+                )
+            );
+        }
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_BINARY_NODE_MACRO(z, n, _)                           \
+    template <typename Derived, typename T>                                  \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    typename binary_node_base<Derived,T>::iterator                           \
+        binary_node_base<Derived,T>::emplace_right(                          \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        if (this->_right_child)                                              \
+        {                                                                    \
+            return iterator(this->_right_child, true);                       \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+            return this->_add_child(                                         \
+                this->_right_child = new Derived(                            \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , _                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_BINARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_BINARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::const_pointer
+        binary_node_base<Derived,T>::get_left_child_ptr() const
+    {
+        return this->_left_child;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::pointer
+        binary_node_base<Derived,T>::get_left_child_ptr()
+    {
+        return this->_left_child;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::const_pointer
+        binary_node_base<Derived,T>::get_right_child_ptr() const
+    {
+        return this->_right_child;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::pointer
+        binary_node_base<Derived,T>::get_right_child_ptr()
+    {
+        return this->_right_child;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::const_iterator
+        binary_node_base<Derived,T>::begin() const
+    {
+        return const_iterator(this->get_derived(), false);
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::begin()
+    {
+        return iterator(this->get_derived(), false);
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::const_iterator
+        binary_node_base<Derived,T>::end() const
+    {
+        return const_iterator();
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::end()
+    {
+        return iterator();
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::size_type
+        binary_node_base<Derived,T>::size() const
+    {
+        return (
+            this->_left_child
+          ? (this->_right_child ? 2 : 1)
+          : (this->_right_child ? 1 : 0)
+        );
+    }
+
+    template <typename Derived, typename T>
+    inline bool binary_node_base<Derived,T>::empty() const
+    {
+        return !this->_left_child && !this->_right_child;
+    }
+
+    template <typename Derived, typename T>
+    void binary_node_base<Derived,T>::clear()
+    {
+        delete this->_left_child;
+        delete this->_right_child;
+        this->_left_child = this->_right_child = 0;
+        this->on_post_clear();
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::pointer
+        binary_node_base<Derived,T>::rotate_left()
+    {
+        pointer pivot = this->_right_child;
+
+        pivot->_parent = this->_parent;
+
+        if ((this->_right_child = pivot->_left_child))
+        {
+            this->_right_child->_parent = this->get_derived();
+        }
+
+        pivot->_left_child = this->get_derived();
+
+        if (this->_parent)
+        {
+            if (this->_parent->_left_child == this->get_derived())
+            {
+                this->_parent->_left_child = pivot;
+            }
+            else // if (this->_parent->_right_child == this->get_derived())
+            {
+                this->_parent->_right_child = pivot;
+            }
+        }
+
+        this->_parent = pivot;
+        this->on_post_rotate_left();
+        return pivot;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::pointer
+        binary_node_base<Derived,T>::rotate_right()
+    {
+        pointer pivot = this->_left_child;
+
+        pivot->_parent = this->_parent;
+
+        if ((this->_left_child = pivot->_right_child))
+        {
+            this->_left_child->_parent = this->get_derived();
+        }
+
+        pivot->_right_child = this->get_derived();
+
+        if (this->_parent)
+        {
+            if (this->_parent->_right_child == this->get_derived())
+            {
+                this->_parent->_right_child = pivot;
+            }
+            else // if (this->_parent->_left_child == this->get_derived())
+            {
+                this->_parent->_left_child = pivot;
+            }
+        }
+
+        this->_parent = pivot;
+        this->on_post_rotate_right();
+        return pivot;
+    }
+
+    template <typename Derived, typename T>
+    bool binary_node_base<Derived,T>::erase_left()
+    {
+        if (this->_left_child)
+        {
+            delete this->_left_child;
+            this->_left_child = 0;
+            this->on_post_erase();
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    template <typename Derived, typename T>
+    bool binary_node_base<Derived,T>::erase_right()
+    {
+        if (this->_right_child)
+        {
+            delete this->_right_child;
+            this->_right_child = 0;
+            this->on_post_erase();
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    template <typename Derived, typename T>
+    typename binary_node_base<Derived,T>::iterator
+        binary_node_base<Derived,T>::_add_child(pointer const& child)
+    {
+        iterator result(child, true);
+
+        result->_parent = this->get_derived();
+        result->on_post_inserted(result, ::boost::mpl::true_());
+        return result;
+    }
+
+    template <typename Derived, typename T>
+    inline void binary_node_base<Derived,T>::_link_children_to_parent()
+    {
+        if (this->_left_child)
+        {
+            this->_left_child->_parent = this->get_derived();
+        }
+
+        if (this->_right_child)
+        {
+            this->_right_child->_parent = this->get_derived();
+        }
+    }
+
+    template <typename Derived, typename T>
+    inline void
+        binary_node_base<Derived,T>::_on_post_modify_value(
+            data_key const& key
+        )
+    {
+        this->on_post_modify_value(key);
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename T>
+    template <typename FusionKey>
+    inline void
+        binary_node_base<Derived,T>::_on_post_modify_value(
+            FusionKey const& key
+        )
+    {
+        this->on_post_modify_value(key);
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__binary_node_base__get__const
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T>
+    typename binary_node_base<Derived,T>::traits::data_type const&
+        get(binary_node_base<Derived,T> const& node, data_key const& key);
+
+    //<-
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::traits::data_type const&
+        get(binary_node_base<Derived,T> const& node, data_key const& key)
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__binary_node_base__get
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T>
+    typename binary_node_base<Derived,T>::traits::data_type&
+        get(binary_node_base<Derived,T>& node, data_key const& key);
+
+    //<-
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::traits::data_type&
+        get(binary_node_base<Derived,T>& node, data_key const& key)
+    {
+        return node[key];
+    }
+
+    template <typename Derived, typename T, typename V>
+    inline void
+        put(
+            binary_node_base<Derived,T>& node
+          , data_key const& key
+          , V const& value
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__binary_node_base__get__key__const
+namespace boost { namespace tree_node {
+
+    template <typename Key, typename Derived, typename T>
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename binary_node_base<Derived,T>::traits::data_type const&
+    >::type
+        get(binary_node_base<Derived,T> const& node);
+
+    //<-
+    template <typename Key, typename Derived, typename T>
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename binary_node_base<Derived,T>::traits::data_type const&
+    >::type
+        get(binary_node_base<Derived,T> const& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__binary_node_base__get__key
+namespace boost { namespace tree_node {
+
+    template <typename Key, typename Derived, typename T>
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename binary_node_base<Derived,T>::traits::data_type&
+    >::type
+        get(binary_node_base<Derived,T>& node);
+
+    //<-
+    template <typename Key, typename Derived, typename T>
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename binary_node_base<Derived,T>::traits::data_type&
+    >::type
+        get(binary_node_base<Derived,T>& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+//[reference__binary_node_base__get__fusion__const
+namespace boost { namespace tree_node {
+
+    template <typename FusionKey, typename Derived, typename T>
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        get(binary_node_base<Derived,T> const& node);
+
+    //<-
+    template <typename FusionKey, typename Derived, typename T>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        get(binary_node_base<Derived,T> const& node)
+    {
+        return node[FusionKey()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__binary_node_base__get__fusion
+namespace boost { namespace tree_node {
+
+    template <typename FusionKey, typename Derived, typename T>
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        get(binary_node_base<Derived,T>& node);
+
+    //<-
+    template <typename FusionKey, typename Derived, typename T>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                binary_node_base<Derived,T>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        get(binary_node_base<Derived,T>& node)
+    {
+        return node[FusionKey()];
+    }
+
+    template <typename Derived, typename T, typename FusionKey, typename V>
+    inline void
+        put(
+            binary_node_base<Derived,T>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T>::type
+                , ::boost::fusion::traits::is_associative<T>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  binary_node_base<Derived,T>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node {
+
+    template <typename T>
+    struct binary_node
+      : public
+        //[reference__binary_node__bases
+        binary_node_base<binary_node<T>,T>
+        //]
+    {
+        //[reference__binary_node__super_t
+        typedef binary_node_base<binary_node<T>,T> super_t;
+        //]
+
+        //[reference__binary_node__traits
+        typedef typename super_t::traits traits;
+        //]
+
+        //[reference__binary_node__pointer
+        typedef typename super_t::pointer pointer;
+        //]
+
+        //[reference__binary_node__const_pointer
+        typedef typename super_t::const_pointer const_pointer;
+        //]
+
+        //[reference__binary_node__iterator
+        typedef typename super_t::iterator iterator;
+        //]
+
+        //[reference__binary_node__const_iterator
+        typedef typename super_t::const_iterator const_iterator;
+        //]
+
+        //[reference__binary_node__size_type
+        typedef typename super_t::size_type size_type;
+        //]
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(binary_node, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__binary_node__emplacement_ctor
+        template <typename ...Args>
+        explicit binary_node(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (binary_node, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename T>
+    template <typename ...Args>
+    inline binary_node<T>::binary_node(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__binary_node_gen
+namespace boost { namespace tree_node {
+
+    struct binary_node_gen
+    {
+        template <typename Derived, typename T>
+        struct apply
+        {
+            typedef binary_node_base<Derived,T> type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_BINARY_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/count_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/count_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_COUNT_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_COUNT_KEY_HPP_INCLUDED
+
+//[reference__count_key
+namespace boost { namespace tree_node {
+
+    struct count_key
+    {
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_COUNT_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/data_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/data_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+
+//[reference__data_key
+namespace boost { namespace tree_node {
+
+    struct data_key
+    {
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/height_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/height_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_HEIGHT_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_HEIGHT_KEY_HPP_INCLUDED
+
+//[reference__height_key
+namespace boost { namespace tree_node {
+
+    struct height_key
+    {
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_HEIGHT_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/nary_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/nary_node.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1159 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_NARY_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_NARY_NODE_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/container_gen/is_recursive_selector.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/data_key.hpp>
+#include <boost/assert.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/fusion/sequence/intrinsic/has_key.hpp>
+#include <boost/fusion/sequence/intrinsic/at_key.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+//[reference__nary_node_base__put
+namespace boost { namespace tree_node {
+
+    //<-
+    template <typename Derived, typename T, typename Selector>
+    class nary_node_base;
+    //->
+
+    template <typename Derived, typename T, typename Selector, typename V>
+    void
+        put(
+            nary_node_base<Derived,T,Selector>& node
+          , data_key const& key
+          , V const& value
+        );
+}}  // namespace boost::tree_node
+//]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename T
+      , typename Selector
+      , typename FusionKey
+    >
+    struct has_key_impl<nary_node_base<Derived,T,Selector>,FusionKey>
+      : ::boost::fusion::result_of::has_key<T,FusionKey>
+    {
+    };
+}}  // namespace boost::tree_node
+
+//[reference__nary_node_base__put__fusion
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename T
+      , typename Selector
+      , typename FusionKey
+      , typename V
+    >
+    void
+        put(
+            nary_node_base<Derived,T,Selector>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T>::type
+                , ::boost::fusion::traits::is_associative<T>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  nary_node_base<Derived,T,Selector>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type = ::boost::mpl::true_()
+        );
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T, typename Selector>
+    class nary_node_base
+      : public
+        //[reference__nary_node_base__bases
+        tree_node_base<Derived>
+        //]
+      , private ::boost::noncopyable
+    {
+        BOOST_MPL_ASSERT((::boost::is_recursive_selector<Selector>));
+
+        typedef typename ::boost::container_gen<Selector,Derived>::type
+                children;
+
+     public:
+        //[reference__nary_node_base__super_t
+        typedef tree_node_base<Derived>
+                super_t;
+        //]
+
+        //[reference__nary_node_base__traits
+        struct traits
+        {
+            typedef T data_type;
+        };
+        //]
+
+        //[reference__nary_node_base__pointer
+        typedef typename super_t::pointer
+                pointer;
+        //]
+
+        //[reference__nary_node_base__const_pointer
+        typedef typename super_t::const_pointer
+                const_pointer;
+        //]
+
+        //[reference__nary_node_base__iterator
+        typedef // implementation_defined
+                //<-
+                typename children::iterator
+                //->
+                iterator;
+        //]
+
+        //[reference__nary_node_base__const_iterator
+        typedef // implementation_defined
+                //<-
+                typename children::const_iterator
+                //->
+                const_iterator;
+        //]
+
+        //[reference__nary_node_base__size_type
+        typedef // implementation_defined
+                //<-
+                typename children::size_type
+                //->
+                size_type;
+        //]
+
+     private:
+        children                   _children;
+        typename traits::data_type _data;
+        pointer                    _parent;
+
+     protected:
+        //[reference__nary_node_base__derived_copy_ctor
+        nary_node_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        nary_node_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__nary_node_base__emplacement_ctor
+        template <typename ...Args>
+        explicit nary_node_base(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL
+          , nary_node_base
+        )
+#endif
+
+        ~nary_node_base();
+
+        //[reference__nary_node_base__on_post_copy_or_move
+        void on_post_copy_or_move();
+        //]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        //[reference__nary_node_base__copy_assign
+        void copy_assign(Derived const& copy);
+        //]
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+     public:
+        //[reference__nary_node_base__key_value_operator__const
+        typename traits::data_type const& operator[](data_key const&) const;
+        //]
+
+        //[reference__nary_node_base__key_value_operator
+        typename traits::data_type& operator[](data_key const&);
+        //]
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        //[reference__nary_node_base__fusion_key_value_operator__const
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<T>::type
+                  , ::boost::fusion::traits::is_associative<T>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    nary_node_base<Derived,T,Selector>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<T const,FusionKey>
+        >::type
+            operator[](FusionKey const&) const;
+        //]
+
+        //[reference__nary_node_base__fusion_key_value_operator
+        template <typename FusionKey>
+        typename ::boost::lazy_enable_if<
+            typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                    typename ::boost::fusion::traits::is_sequence<T>::type
+                  , ::boost::fusion::traits::is_associative<T>
+                  , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                    nary_node_base<Derived,T,Selector>
+                  , FusionKey
+                >
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::fusion::result_of::at_key<T,FusionKey>
+        >::type
+            operator[](FusionKey const&);
+        //]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+        //[reference__nary_node_base__get_parent_ptr__const
+        const_pointer get_parent_ptr() const;
+        //]
+
+        //[reference__nary_node_base__get_parent_ptr
+        pointer get_parent_ptr();
+        //]
+
+        //[reference__nary_node_base__insert
+        iterator insert(Derived const& child);
+        //]
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__nary_node_base__emplace
+        template <typename ...Args>
+        iterator emplace(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_NARY_NODE_MACRO(z, n, _)                             \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            emplace(                                                         \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_NARY_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_NARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        //[reference__nary_node_base__begin__const
+        const_iterator begin() const;
+        //]
+
+        //[reference__nary_node_base__begin
+        iterator begin();
+        //]
+
+        //[reference__nary_node_base__end__const
+        const_iterator end() const;
+        //]
+
+        //[reference__nary_node_base__end
+        iterator end();
+        //]
+
+        //[reference__nary_node_base__size
+        size_type size() const;
+        //]
+
+        //[reference__nary_node_base__empty
+        bool empty() const;
+        //]
+
+        //[reference__nary_node_base__clear
+        void clear();
+        //]
+
+     private:
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename ...Args>
+        iterator _add_child(Args&& ...args);
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_NARY_NODE_MACRO(z, n, _)                             \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        iterator                                                             \
+            _add_child(                                                      \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            );                                                               \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_NARY_NODE_MACRO
+          , _
+        )
+#undef BOOST_TREE_NODE_NARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        void _initialize(iterator& to_child);
+
+        void _link_children_to_parent();
+
+        void _on_post_modify_value(data_key const& key);
+
+        template <typename D, typename T0, typename S, typename V>
+        friend void
+            put(
+                nary_node_base<D,T0,S>& node
+              , data_key const& key
+              , V const& value
+            );
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        template <typename FusionKey>
+        void _on_post_modify_value(FusionKey const& key);
+
+        template <
+            typename D
+          , typename T0
+          , typename S
+          , typename FusionKey
+          , typename V
+        >
+        friend void
+          put(
+            nary_node_base<D,T0,S>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T0>::type
+                , ::boost::fusion::traits::is_associative<T0>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<nary_node_base<D,T0,S>,FusionKey>
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+          );
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+    };
+
+    template <typename Derived, typename T, typename Selector>
+    nary_node_base<Derived,T,Selector>::nary_node_base(Derived const& copy)
+      : _children(copy._children)
+      , _data(copy._data)
+      , _parent(copy._parent)
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T, typename Selector>
+    nary_node_base<Derived,T,Selector>::nary_node_base(
+        BOOST_RV_REF(Derived) source
+    ) : _children(::boost::move(source._children))
+      , _data(::boost::move(source._data))
+      , _parent(source._parent)
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T, typename Selector>
+    template <typename ...Args>
+    nary_node_base<Derived,T,Selector>::nary_node_base(Args&& ...args)
+      : _children(), _data(::boost::forward<Args>(args)...), _parent()
+    {
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_NARY_NODE_MACRO(z, n, _)                             \
+    template <typename Derived, typename T, typename Selector>               \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    nary_node_base<Derived,T,Selector>::nary_node_base(                      \
+        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                     \
+            n                                                                \
+          , BOOST_CONTAINER_PP_PARAM_LIST                                    \
+          , _                                                                \
+        )                                                                    \
+    ) : _children()                                                          \
+      , _data(                                                               \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+      , _parent()                                                            \
+    {                                                                        \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_NARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_NARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T, typename Selector>
+    nary_node_base<Derived,T,Selector>::~nary_node_base()
+    {
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline void nary_node_base<Derived,T,Selector>::on_post_copy_or_move()
+    {
+        this->_link_children_to_parent();
+        this->on_post_propagate_value(data_key());
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T, typename Selector>
+    void nary_node_base<Derived,T,Selector>::copy_assign(Derived const& copy)
+    {
+        Derived twin(copy);
+
+        this->_children = twin._children;
+        this->_data = twin._data;
+    }
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <typename Derived, typename T, typename Selector>
+    void
+        nary_node_base<Derived,T,Selector>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+    {
+        Derived twin(static_cast<Derived const&>(copy));
+
+        this->_children = ::boost::move(twin._children);
+        this->_data = ::boost::move(twin._data);
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline void
+        nary_node_base<Derived,T,Selector>::move_assign(
+            BOOST_RV_REF(Derived) source
+        )
+    {
+        this->_children = ::boost::move(source._children);
+        this->_data = ::boost::move(source._data);
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<
+        Derived
+      , T
+      , Selector
+    >::traits::data_type const&
+        nary_node_base<Derived,T,Selector>::operator[](data_key const&) const
+    {
+        return this->_data;
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::traits::data_type&
+        nary_node_base<Derived,T,Selector>::operator[](data_key const&)
+    {
+        return this->_data;
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename T, typename Selector>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        nary_node_base<Derived,T,Selector>::operator[](FusionKey const&) const
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    template <typename FusionKey>
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        nary_node_base<Derived,T,Selector>::operator[](FusionKey const&)
+    {
+        return ::boost::fusion::at_key<FusionKey>(this->_data);
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::const_pointer
+        nary_node_base<Derived,T,Selector>::get_parent_ptr() const
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::pointer
+        nary_node_base<Derived,T,Selector>::get_parent_ptr()
+    {
+        return this->_parent;
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::iterator
+        nary_node_base<Derived,T,Selector>::insert(Derived const& child)
+    {
+#if defined BOOST_MSVC
+        Derived twin(child);
+        iterator result(this->_add_child(twin));
+#else
+        iterator result(this->_add_child(Derived(child)));
+#endif
+        BOOST_ASSERT((*result)._parent == this->get_derived());
+        return result;
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T, typename Selector>
+    template <typename ...Args>
+    inline typename nary_node_base<Derived,T,Selector>::iterator
+        nary_node_base<Derived,T,Selector>::emplace(Args&& ...args)
+    {
+        iterator result(this->_add_child(::boost::forward<Args>(args)...));
+        BOOST_ASSERT((*result)._parent == this->get_derived());
+        return result;
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_NARY_NODE_MACRO(z, n, _)                             \
+    template <typename Derived, typename T, typename Selector>               \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    inline typename nary_node_base<Derived,T,Selector>::iterator             \
+        nary_node_base<Derived,T,Selector>::emplace(                         \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        iterator result = this->_add_child(                                  \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        );                                                                   \
+        BOOST_ASSERT((*result)._parent == this->get_derived());              \
+        return result;                                                       \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_NARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_NARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::const_iterator
+        nary_node_base<Derived,T,Selector>::begin() const
+    {
+        return this->_children.begin();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::iterator
+        nary_node_base<Derived,T,Selector>::begin()
+    {
+        return this->_children.begin();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::const_iterator
+        nary_node_base<Derived,T,Selector>::end() const
+    {
+        return this->_children.end();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::iterator
+        nary_node_base<Derived,T,Selector>::end()
+    {
+        return this->_children.end();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::size_type
+        nary_node_base<Derived,T,Selector>::size() const
+    {
+        return this->_children.size();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline bool nary_node_base<Derived,T,Selector>::empty() const
+    {
+        return this->_children.empty();
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline void nary_node_base<Derived,T,Selector>::clear()
+    {
+        this->_children.clear();
+        this->on_post_clear();
+    }
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename Derived, typename T, typename Selector>
+    template <typename ...Args>
+    inline typename nary_node_base<Derived,T,Selector>::iterator
+        nary_node_base<Derived,T,Selector>::_add_child(Args&& ...args)
+    {
+        typename ::boost::emplace_function_gen<Selector>::type emplacer;
+        ::std::pair<iterator,bool> p = emplacer(
+            this->_children
+          , ::boost::forward<Args>(args)...
+        );
+
+        if (p.second)
+        {
+            this->_initialize(p.first);
+        }
+
+        return p.first;
+    }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_NARY_NODE_MACRO(z, n, _)                             \
+    template <typename Derived, typename T, typename Selector>               \
+    BOOST_PP_EXPR_IF(n, template <)                                          \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                             \
+    BOOST_PP_EXPR_IF(n, >)                                                   \
+    inline typename nary_node_base<Derived,T,Selector>::iterator             \
+        nary_node_base<Derived,T,Selector>::_add_child(                      \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+    {                                                                        \
+        typename ::boost::emplace_function_gen<Selector>::type emplacer;     \
+        ::std::pair<iterator,bool> p = emplacer(                             \
+            this->_children                                                  \
+            BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                        \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        );                                                                   \
+        if (p.second)                                                        \
+        {                                                                    \
+            this->_initialize(p.first);                                      \
+        }                                                                    \
+        return p.first;                                                      \
+    }                                                                        \
+//!
+    BOOST_PP_REPEAT(
+        BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+      , BOOST_TREE_NODE_NARY_NODE_MACRO
+      , _
+    )
+#undef BOOST_TREE_NODE_NARY_NODE_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <typename Derived, typename T, typename Selector>
+    inline void
+        nary_node_base<Derived,T,Selector>::_initialize(iterator& to_child)
+    {
+        (*to_child)._parent = this->get_derived();
+        (*to_child).on_post_inserted(
+            to_child
+          , ::boost::has_stable_iterators_selector<Selector>()
+        );
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    void nary_node_base<Derived,T,Selector>::_link_children_to_parent()
+    {
+        iterator itr_end = this->end();
+
+        for (iterator itr = this->begin(); itr != itr_end; ++itr)
+        {
+            (*itr)._parent = this->get_derived();
+        }
+    }
+
+    template <typename Derived, typename T, typename Selector>
+    inline void
+        nary_node_base<Derived,T,Selector>::_on_post_modify_value(
+            data_key const& key
+        )
+    {
+        this->on_post_modify_value(key);
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    template <typename Derived, typename T, typename Selector>
+    template <typename FusionKey>
+    inline void
+        nary_node_base<Derived,T,Selector>::_on_post_modify_value(
+            FusionKey const& key
+        )
+    {
+        this->on_post_modify_value(key);
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__nary_node_base__get__const
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T, typename Selector>
+    typename nary_node_base<
+        Derived
+      , T
+      , Selector
+    >::traits::data_type const&
+        get(
+            nary_node_base<Derived,T,Selector> const& node
+          , data_key const& key
+        );
+
+    //<-
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<
+        Derived
+      , T
+      , Selector
+    >::traits::data_type const&
+        get(
+            nary_node_base<Derived,T,Selector> const& node
+          , data_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__nary_node_base__get
+namespace boost { namespace tree_node {
+
+    template <typename Derived, typename T, typename Selector>
+    typename nary_node_base<Derived,T,Selector>::traits::data_type&
+        get(nary_node_base<Derived,T,Selector>& node, data_key const& key);
+
+    //<-
+    template <typename Derived, typename T, typename Selector>
+    inline typename nary_node_base<Derived,T,Selector>::traits::data_type&
+        get(nary_node_base<Derived,T,Selector>& node, data_key const& key)
+    {
+        return node[key];
+    }
+
+    template <typename Derived, typename T, typename Selector, typename V>
+    inline void
+        put(
+            nary_node_base<Derived,T,Selector>& node
+          , data_key const& key
+          , V const& value
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__nary_node_base__get__key__const
+namespace boost { namespace tree_node {
+
+    template <typename Key, typename Derived, typename T, typename Selector>
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename nary_node_base<
+            Derived
+          , T
+          , Selector
+        >::traits::data_type const&
+    >::type
+        get(nary_node_base<Derived,T,Selector> const& node);
+
+    //<-
+    template <typename Key, typename Derived, typename T, typename Selector>
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename nary_node_base<
+            Derived
+          , T
+          , Selector
+        >::traits::data_type const&
+    >::type
+        get(nary_node_base<Derived,T,Selector> const& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__nary_node_base__get__key
+namespace boost { namespace tree_node {
+
+    template <typename Key, typename Derived, typename T, typename Selector>
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename nary_node_base<
+            Derived
+          , T
+          , Selector
+        >::traits::data_type&
+    >::type
+        get(nary_node_base<Derived,T,Selector>& node);
+
+    //<-
+    template <typename Key, typename Derived, typename T, typename Selector>
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,data_key>
+      , typename nary_node_base<
+            Derived
+          , T
+          , Selector
+        >::traits::data_type&
+    >::type
+        get(nary_node_base<Derived,T,Selector>& node)
+    {
+        return node[data_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+//[reference__nary_node_base__get__fusion__const
+namespace boost { namespace tree_node {
+
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename T
+      , typename Selector
+    >
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        get(nary_node_base<Derived,T,Selector> const& node);
+
+    //<-
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename T
+      , typename Selector
+    >
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T const,FusionKey>
+    >::type
+        get(nary_node_base<Derived,T,Selector> const& node)
+    {
+        return node[FusionKey()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__nary_node_base__get__fusion
+namespace boost { namespace tree_node {
+
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename T
+      , typename Selector
+    >
+    typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        get(nary_node_base<Derived,T,Selector>& node);
+
+    //<-
+    template <
+        typename FusionKey
+      , typename Derived
+      , typename T
+      , typename Selector
+    >
+    inline typename ::boost::lazy_enable_if<
+        typename ::boost::mpl::if_<
+            typename ::boost::mpl::eval_if<
+                typename ::boost::fusion::traits::is_sequence<T>::type
+              , ::boost::fusion::traits::is_associative<T>
+              , ::boost::mpl::false_
+            >::type
+          , ::boost::tree_node::has_key<
+                nary_node_base<Derived,T,Selector>
+              , FusionKey
+            >
+          , ::boost::mpl::false_
+        >::type
+      , ::boost::fusion::result_of::at_key<T,FusionKey>
+    >::type
+        get(nary_node_base<Derived,T,Selector>& node)
+    {
+        return node[FusionKey()];
+    }
+
+    template <
+        typename Derived
+      , typename T
+      , typename Selector
+      , typename FusionKey
+      , typename V
+    >
+    inline void
+        put(
+            nary_node_base<Derived,T,Selector>& node
+          , FusionKey const& key
+          , V const& value
+          , typename ::boost::enable_if<
+              typename ::boost::mpl::if_<
+                typename ::boost::mpl::eval_if<
+                  typename ::boost::fusion::traits::is_sequence<T>::type
+                , ::boost::fusion::traits::is_associative<T>
+                , ::boost::mpl::false_
+                >::type
+              , ::boost::tree_node::has_key<
+                  nary_node_base<Derived,T,Selector>
+                , FusionKey
+                >
+              , ::boost::mpl::false_
+              >::type
+            , ::boost::mpl::true_
+            >::type
+        )
+    {
+        node[key] = value;
+        node._on_post_modify_value(key);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+namespace boost { namespace tree_node {
+
+    template <typename T, typename Selector = ::boost::ptr_dequeS>
+    struct nary_node
+      : public
+        //[reference__nary_node__bases
+        nary_node_base<nary_node<T,Selector>,T,Selector>
+        //]
+    {
+        //[reference__nary_node__super_t
+        typedef nary_node_base<nary_node,T,Selector> super_t;
+        //]
+
+        //[reference__nary_node__traits
+        typedef typename super_t::traits traits;
+        //]
+
+        //[reference__nary_node__pointer
+        typedef typename super_t::pointer pointer;
+        //]
+
+        //[reference__nary_node__const_pointer
+        typedef typename super_t::const_pointer const_pointer;
+        //]
+
+        //[reference__nary_node__iterator
+        typedef typename super_t::iterator iterator;
+        //]
+
+        //[reference__nary_node__const_iterator
+        typedef typename super_t::const_iterator const_iterator;
+        //]
+
+        //[reference__nary_node__size_type
+        typedef typename super_t::size_type size_type;
+        //]
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(nary_node, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__nary_node__emplacement_ctor
+        template <typename ...Args>
+        explicit nary_node(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (nary_node, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename T, typename Selector>
+    template <typename ...Args>
+    inline nary_node<T,Selector>::nary_node(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__nary_node_gen
+namespace boost { namespace tree_node {
+
+    template <typename Selector = ::boost::ptr_dequeS>
+    struct nary_node_gen
+    {
+        template <typename Derived, typename T>
+        struct apply
+        {
+            typedef nary_node_base<Derived,T,Selector> type;
+        };
+    };
+
+    typedef nary_node_gen<> nary_node_default_gen;
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_NARY_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/position_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/position_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_POSITION_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_POSITION_KEY_HPP_INCLUDED
+
+//[reference__position_key
+namespace boost { namespace tree_node {
+
+    struct position_key
+    {
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_POSITION_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/preprocessor.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/preprocessor.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,196 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_PREPROCESSOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_PREPROCESSOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE \
+ && !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ && !defined BOOST_TREE_NODE_CAN_USE_FUSION
+#define BOOST_TREE_NODE_CAN_USE_FUSION
+#endif
+
+#include <boost/container/detail/workaround.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/container/detail/preprocessor.hpp>
+
+//[reference__macro__emplacement_ctor_header
+#define BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER(z, n, Type)                  \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        BOOST_PP_EXPR_IIF(BOOST_PP_EQUAL(n, 1), explicit)                    \
+        Type(                                                                \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_LIST                                \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+//]
+
+//[reference__macro__emplacement_ctor_fwd_decl
+#define BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL(z, n, Type)                \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER(z, n, Type);                 \
+//]
+
+//[reference__macro__emplacement_ctor_base_fwd
+#define BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD(z, n, Base)                \
+      : Base(                                                                \
+            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                                 \
+                n                                                            \
+              , BOOST_CONTAINER_PP_PARAM_FORWARD                             \
+              , _                                                            \
+            )                                                                \
+        )                                                                    \
+//]
+
+//[reference__macro__emplacement_ctor_inline_header
+#define BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER(                             \
+            z                                                                \
+          , n                                                                \
+          , BOOST_PP_TUPLE_ELEM(2, 0, Tuple)                                 \
+        )                                                                    \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD(                           \
+            z                                                                \
+          , n                                                                \
+          , BOOST_PP_TUPLE_ELEM(2, 1, Tuple)                                 \
+        )                                                                    \
+//]
+
+//[reference__macro__emplacement_ctor_inline_def
+#define BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF(z, n, Tuple)             \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+        {                                                                    \
+            Base::on_post_emplacement_construct();                           \
+        }                                                                    \
+//]
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+//[reference__macro__copy_constructible
+#define BOOST_TREE_NODE_COPY_CONSTRUCTIBLE(Derived, Base)                    \
+        inline Derived(Derived const& copy) : Base(copy)                     \
+        {                                                                    \
+            Base::on_post_copy_or_move();                                    \
+        }                                                                    \
+        inline Derived(Derived& copy)                                        \
+          : Base(const_cast<Derived const&>(copy))                           \
+        {                                                                    \
+            Base::on_post_copy_or_move();                                    \
+        }                                                                    \
+//]
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#define BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(Derived, Base)                  \
+        BOOST_TREE_NODE_COPY_CONSTRUCTIBLE(Derived, Base)                    \
+        inline Derived& operator=(Derived const& copy)                       \
+        {                                                                    \
+            if (this != ©)                                               \
+            {                                                                \
+                Base::copy_assign(copy);                                     \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+        inline Derived& operator=(Derived& copy)                             \
+        {                                                                    \
+            if (this != ©)                                               \
+            {                                                                \
+                Base::copy_assign(const_cast<Derived const&>(copy));         \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+//!
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_NO_RVALUE_REFERENCES
+#include <boost/move/move.hpp>
+#define BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(Derived, Base)                  \
+        BOOST_TREE_NODE_COPY_CONSTRUCTIBLE(Derived, Base)                    \
+        inline Derived(::boost::rv<Derived>& source) : Base(source)          \
+        {                                                                    \
+            Base::on_post_copy_or_move();                                    \
+        }                                                                    \
+        inline operator ::boost::rv<Derived> const&() const                  \
+        {                                                                    \
+            return *static_cast< ::boost::rv<Derived> const*>(this);         \
+        }                                                                    \
+        inline operator ::boost::rv<Derived>&()                              \
+        {                                                                    \
+            return *static_cast< ::boost::rv<Derived>*>(this);               \
+        }                                                                    \
+        inline Derived& operator=(::boost::rv<Derived> const& ca_ref)        \
+        {                                                                    \
+            Derived const& copy = static_cast<Derived const&>(ca_ref);       \
+            if (this != ©)                                               \
+            {                                                                \
+                Base::copy_assign(copy);                                     \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+        inline Derived& operator=(::boost::rv<Derived>& rv_ref)              \
+        {                                                                    \
+            if (this != &static_cast<Derived&>(rv_ref))                      \
+            {                                                                \
+                Base::move_assign(rv_ref);                                   \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+        inline Derived& operator=(Derived& copy)                             \
+        {                                                                    \
+            if (this != ©)                                               \
+            {                                                                \
+                Base::copy_assign(const_cast<Derived const&>(copy));         \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+//!
+#else  // !defined BOOST_NO_RVALUE_REFERENCES
+//[reference__macro__copyable_and_movable
+#define BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(Derived, Base)                  \
+        BOOST_TREE_NODE_COPY_CONSTRUCTIBLE(Derived, Base)                    \
+        inline Derived(Derived&& source)                                     \
+          : Base(static_cast<Derived&&>(source))                             \
+        {                                                                    \
+            Base::on_post_copy_or_move();                                    \
+        }                                                                    \
+        inline Derived& operator=(Derived const& copy)                       \
+        {                                                                    \
+            if (this != ©)                                               \
+            {                                                                \
+                Base::copy_assign(copy);                                     \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+        inline Derived& operator=(Derived&& source)                          \
+        {                                                                    \
+            if (this != &static_cast<Derived&>(source))                      \
+            {                                                                \
+                Base::move_assign(static_cast<Derived&&>(source));           \
+                Base::on_post_copy_or_move();                                \
+            }                                                                \
+            return *this;                                                    \
+        }                                                                    \
+//]
+#endif  // BOOST_NO_RVALUE_REFERENCES
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_TREE_NODE_PREPROCESSOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/red_black_flag_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/red_black_flag_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,23 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+
+//[reference__red_black_flag_key
+namespace boost { namespace tree_node {
+
+    struct red_flag_key
+    {
+    };
+
+    struct black_flag_key
+    {
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/accumulation_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/accumulation_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,23 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_ACCUMULATION_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_ACCUMULATION_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/mpl/bool.hpp>
+#include <boost/tree_node/typeof/data_key.hpp>
+#include <boost/tree_node/accumulation_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::accumulation_key, 5)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_ACCUMULATION_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/count_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/count_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,16 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_COUNT_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_COUNT_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/count_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::count_key)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_COUNT_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/data_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/data_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,16 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/data_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::data_key)
+
+#endif  // BOOST_TREE_NODE_DATA_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/height_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/height_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,16 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_HEIGHT_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_HEIGHT_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/height_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::height_key)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_HEIGHT_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/position_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/position_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,16 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_POSITION_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_POSITION_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/position_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::position_key)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_POSITION_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/red_black_flag_key.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/red_black_flag_key.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,17 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/red_black_flag_key.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::red_flag_key)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::black_flag_key)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_RED_BLACK_FLAG_KEY_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/with_accumulation.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/with_accumulation.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_WITH_ACCUMULATION_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_WITH_ACCUMULATION_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/typeof/accumulation_key.hpp>
+#include <boost/tree_node/with_accumulation.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation_base, 9)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation_gen, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_accumulation_gen, 2)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_WITH_ACCUMULATION_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/with_count.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/with_count.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_WITH_COUNT_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_WITH_COUNT_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/typeof/count_key.hpp>
+#include <boost/tree_node/with_count.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count_base, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count_gen, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_count_gen, 2)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_WITH_COUNT_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/with_height.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/with_height.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,22 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_WITH_HEIGHT_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_WITH_HEIGHT_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/typeof/height_key.hpp>
+#include <boost/tree_node/with_height.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height_base, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height_gen, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_height_gen, 2)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_WITH_HEIGHT_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/with_position.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/with_position.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,20 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_WITH_POSITION_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_WITH_POSITION_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/typeof/position_key.hpp>
+#include <boost/tree_node/with_position.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_position_base, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_position, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_position, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_position_gen, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_WITH_POSITION_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/with_red_black_flag.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/with_red_black_flag.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,20 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_TYPEOF_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/typeof/red_black_flag_key.hpp>
+#include <boost/tree_node/with_red_black_flag.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_red_black_flag_base, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_red_black_flag, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_red_black_flag, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::with_red_black_flag_gen, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/with_accumulation.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_accumulation.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1492 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_WITH_ACCUMULATION_HPP_INCLUDED
+#define BOOST_TREE_NODE_WITH_ACCUMULATION_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if defined BOOST_NO_SFINAE
+#error boost::tree_node::with_accumulation requires working boost::enable_if.
+#endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/functional.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/accumulators/framework/accumulator_set.hpp>
+#include <boost/accumulators/framework/extractor.hpp>
+#include <boost/accumulators/framework/features.hpp>
+#include <boost/utility/value_init.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/accumulation_key.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#include <boost/assert.hpp>
+
+namespace boost { namespace tree_node { namespace _detail {
+
+    template <typename Value>
+    struct choose_accumulation_value
+    {
+        template <typename Node, typename Key>
+        struct apply
+        {
+            typedef Value type;
+        };
+    };
+
+    template <>
+    struct choose_accumulation_value<void>
+    {
+        template <typename Node, typename Key>
+        struct apply
+        {
+            typedef BOOST_TYPEOF_TPL(
+                        get<Key>(::boost::get_reference<Node const>())
+                    )
+                    type;
+        };
+    };
+}}}  // namespace boost::tree_node::_detail
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    class with_accumulation_base
+      : public
+        //[reference__with_accumulation_base__bases
+        ::boost::mpl::eval_if<
+            ::std::tr1::is_void<T2>
+          , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+          , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+        >::type
+        //]
+    {
+        friend struct tree_node_base<Derived>;
+
+        typedef with_accumulation_base<
+                    Derived
+                  , BaseGenerator
+                  , T1
+                  , T2
+                  , Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >
+                self;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    ::std::tr1::is_void<T2>
+                  , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+                  , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+                >::type
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+     private:
+        typedef typename ::boost::mpl::apply_wrap2<
+                    _detail::choose_accumulation_value<
+                        Value
+                    >
+                  , super_t
+                  , Key
+                >::type
+                //->
+                AccumulationValue;
+
+        AccumulationValue _accumulation;
+
+     protected:
+        //[reference__with_accumulation_base__derived_copy_ctor
+        with_accumulation_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_accumulation_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_accumulation_base__emplacement_ctor
+        template <typename ...Args>
+        explicit with_accumulation_base(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_WITH_ACCUMULATION_MACRO(z, n, Tuple)                 \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+          , _accumulation(                                                   \
+            ::boost::accumulators::extractor<Tag>()(                         \
+                ::boost::accumulators::accumulator_set<                      \
+                    AccumulationValue                                        \
+                  , ::boost::accumulators::features<Tag>                     \
+                >()                                                          \
+            )                                                                \
+        )                                                                    \
+        {                                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_WITH_ACCUMULATION_MACRO
+          , (with_accumulation_base, super_t)
+        )
+#undef BOOST_TREE_NODE_WITH_ACCUMULATION_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        ~with_accumulation_base();
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        void copy_assign(Derived const& copy);
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+        void on_post_emplacement_construct();
+
+        void on_post_copy_or_move();
+
+        template <typename K>
+        void on_post_modify_value_impl(K const& key);
+
+        void on_post_modify_value_impl(Key const& key);
+
+        template <typename K>
+        void on_post_propagate_value_impl(K const& key);
+
+        void on_post_propagate_value_impl(Key const& key);
+
+        template <typename K>
+        void on_post_propagate_value_once_impl(K const& key);
+
+        void on_post_propagate_value_once_impl(Key const& key);
+
+        template <typename BooleanIntegralConstant>
+        void
+            on_post_inserted_impl(
+                iterator position
+              , BooleanIntegralConstant invalidates_sibling_positions
+            );
+
+        void on_post_erase_impl();
+
+        void on_post_clear_impl();
+
+        void on_post_rotate_left_impl();
+
+        void on_post_rotate_right_impl();
+
+     public:
+        //[reference__with_accumulation_base__key_value_operator
+        //<-
+#if 0
+        //->
+        typename ::boost::mpl::if_<
+            ::std::tr1::is_void<Value>
+          , BOOST_TYPEOF_TPL(get<Key>(static_cast<super_t const&>(*this)))
+          , Value
+        >::type const&
+        //<-
+#endif
+        AccumulationValue const&
+        //->
+            operator[](
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                > const&
+            )
+            const;
+        //]
+
+     private:
+        void
+            _set_accumulation(
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                > const&
+            );
+
+        void _update();
+
+        static void
+            _update(
+                pointer p
+              , accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                > const&
+            );
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    with_accumulation_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+      , Key
+      , Tag
+      , IncludesAllDescendants
+      , IncludesRoot
+      , Value
+    >::with_accumulation_base(Derived const& copy)
+      : super_t(copy)
+      , _accumulation(
+            static_cast<self const&>(copy)[
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >()
+            ]
+        )
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    with_accumulation_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+      , Key
+      , Tag
+      , IncludesAllDescendants
+      , IncludesRoot
+      , Value
+    >::with_accumulation_base(
+#if defined BOOST_NO_RVALUE_REFERENCES
+        ::boost::rv<Derived>& source
+    ) : super_t(source)
+#else
+        Derived&& source
+    ) : super_t(static_cast<Derived&&>(source))
+#endif
+      , _accumulation(
+            static_cast<self&&>(source)[
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >()
+            ]
+        )
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    template <typename ...Args>
+    with_accumulation_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+      , Key
+      , Tag
+      , IncludesAllDescendants
+      , IncludesRoot
+      , Value
+    >::with_accumulation_base(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+      , _accumulation(
+            ::boost::accumulators::extractor<Tag>()(
+                ::boost::accumulators::accumulator_set<
+                    AccumulationValue
+                  , ::boost::accumulators::features<Tag>
+                >()
+            )
+        )
+    {
+    }
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    with_accumulation_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+      , Key
+      , Tag
+      , IncludesAllDescendants
+      , IncludesRoot
+      , Value
+    >::~with_accumulation_base()
+    {
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesRoot
+          , Value
+        >::copy_assign(Derived const& copy)
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::move_assign(BOOST_RV_REF(Derived) source)
+    {
+#if defined BOOST_NO_RVALUE_REFERENCES
+        super_t::move_assign(source);
+#else
+        super_t::move_assign(static_cast<Derived&&>(source));
+#endif
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy)
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    {
+        super_t::copy_assign(copy);
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_emplacement_construct()
+    {
+        super_t::on_post_emplacement_construct();
+
+        if (IncludesRoot::value)
+        {
+            self::_accumulation = get<Key>(*this->get_derived());
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_copy_or_move()
+    {
+        super_t::on_post_copy_or_move();
+        this->_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    template <typename K>
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_modify_value_impl(K const& key)
+    {
+        super_t::on_post_modify_value_impl(key);
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_modify_value_impl(Key const& key)
+    {
+        super_t::on_post_modify_value_impl(key);
+
+        if (IncludesRoot::value)
+        {
+            this->_update();
+        }
+        else if (pointer p = this->get_parent_ptr())
+        {
+            static_cast<self*>(p)->_update();
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    template <typename K>
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_propagate_value_impl(K const& key)
+    {
+        super_t::on_post_propagate_value_impl(key);
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_propagate_value_impl(Key const& key)
+    {
+        super_t::on_post_propagate_value_impl(key);
+
+        if (IncludesRoot::value)
+        {
+            this->_update();
+        }
+        else if (pointer p = this->get_parent_ptr())
+        {
+            static_cast<self*>(p)->_update();
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    template <typename K>
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_propagate_value_once_impl(K const& key)
+    {
+        super_t::on_post_propagate_value_once_impl(key);
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_propagate_value_once_impl(Key const& key)
+    {
+        super_t::on_post_propagate_value_once_impl(key);
+
+        if (IncludesRoot::value)
+        {
+            this->_set_accumulation(
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >()
+            );
+        }
+
+        self* p = this->get_parent_ptr();
+
+        BOOST_ASSERT_MSG(
+            p
+          , "Do not call on_post_propagate_value_once() on root."
+        );
+        p->_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+
+        if ((p = p->get_parent_ptr()))
+        {
+            p->_set_accumulation(
+                accumulation_key<
+                    Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >()
+            );
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    template <typename BooleanIntegralConstant>
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_inserted_impl(
+            iterator position
+          , BooleanIntegralConstant invalidates_sibling_positions
+        )
+    {
+        super_t::on_post_inserted_impl(
+            position
+          , invalidates_sibling_positions
+        );
+        static_cast<self*>(this->get_parent_ptr())->_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_erase_impl()
+    {
+        super_t::on_post_erase_impl();
+        this->_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_clear_impl()
+    {
+        super_t::on_post_clear_impl();
+        this->_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_rotate_left_impl()
+    {
+        super_t::on_post_rotate_left_impl();
+        this->_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+        static_cast<self*>(this->get_parent_ptr())->_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+        this->on_post_propagate_value_once(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::on_post_rotate_right_impl()
+    {
+        super_t::on_post_rotate_right_impl();
+        this->_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+        static_cast<self*>(this->get_parent_ptr())->_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+        this->on_post_propagate_value_once(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline typename with_accumulation_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+      , Key
+      , Tag
+      , IncludesAllDescendants
+      , IncludesRoot
+      , Value
+    >::AccumulationValue const&
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::operator[](
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const&
+        ) const
+    {
+        return self::_accumulation;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::_set_accumulation(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const&
+        )
+    {
+        ::boost::accumulators::accumulator_set<
+            AccumulationValue
+          , ::boost::accumulators::features<Tag>
+        > acc;
+
+        if (IncludesRoot::value)
+        {
+            acc(get<Key>(*this->get_derived()));
+        }
+
+        if (IncludesAllDescendants::value)
+        {
+            for (
+                ::boost::tree_node::breadth_first_descendant_iterator<
+                    Derived const
+                > c_itr(*this->get_derived());
+                c_itr;
+                ++c_itr
+            )
+            {
+                acc(get<Key>(::boost::tree_node::dereference_iterator(c_itr)));
+            }
+        }
+        else
+        {
+            const_iterator c_end = this->end();
+
+            for (const_iterator c_itr = this->begin(); c_itr != c_end; ++c_itr)
+            {
+                acc(get<Key>(::boost::tree_node::dereference_iterator(c_itr)));
+            }
+        }
+
+        self::_accumulation = ::boost::accumulators::extractor<
+            Tag
+        >()(acc);
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::_update()
+    {
+        self::_update(
+            this->get_derived()
+          , accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+        this->on_post_propagate_value(
+            accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >()
+        );
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    void
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >::_update(
+            pointer p
+          , accumulation_key<
+                Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const& key
+        )
+    {
+        do
+        {
+            static_cast<self*>(p)->_set_accumulation(key);
+        }
+        while ((p = p->get_parent_ptr()));
+    }
+}}  // namespace boost::tree_node
+
+#if 0
+//[reference__with_accumulation_base__get
+namespace boost { namespace tree_node {
+
+    template <
+        typename AccumulationKey
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    typename ::boost::mpl::if_<
+        ::std::tr1::is_void<Value>
+      , BOOST_TYPEOF_TPL(
+            static_cast<
+                typename with_accumulation_base<
+                    Derived
+                  , BaseGenerator
+                  , T1
+                  , T2
+                  , Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >::super_t const&
+            >(node)
+        )
+      , Value
+    >::type
+        get(
+            with_accumulation_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const& node
+        );
+}}  // namespace boost::tree_node
+//]
+#endif
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename AccumulationKey
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline typename ::boost::lazy_enable_if<
+        ::std::tr1::is_same<
+            accumulation_key<Key,Tag,IncludesAllDescendants,IncludesRoot,Value>
+          , AccumulationKey
+        >
+      , ::boost::mpl::apply_wrap2<
+            _detail::choose_accumulation_value<Value>
+          , typename with_accumulation_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >::super_t
+          , Key
+        >
+    >::type const&
+        get(
+            with_accumulation_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const& node
+        )
+    {
+        return node[AccumulationKey()];
+    }
+
+    template <
+        typename AccumulationKey
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    inline typename ::boost::lazy_disable_if<
+        ::std::tr1::is_same<
+            accumulation_key<Key,Tag,IncludesAllDescendants,IncludesRoot,Value>
+          , AccumulationKey
+        >
+      , ::boost::mpl::apply_wrap2<
+            _detail::choose_accumulation_value<Value>
+          , typename with_accumulation_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            >::super_t
+          , Key
+        >
+    >::type
+        get(
+            with_accumulation_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Key
+              , Tag
+              , IncludesAllDescendants
+              , IncludesRoot
+              , Value
+            > const& node
+        )
+    {
+        return get<AccumulationKey>(
+            static_cast<
+                typename with_accumulation_base<
+                    Derived
+                  , BaseGenerator
+                  , T1
+                  , T2
+                  , Key
+                  , Tag
+                  , IncludesAllDescendants
+                  , IncludesRoot
+                  , Value
+                >::super_t const&
+            >(node)
+        );
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Key
+      , typename Tag
+      , typename IncludesAllDescendants
+      , typename IncludesRoot
+      , typename Value
+    >
+    struct has_key_impl<
+        with_accumulation_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Key
+          , Tag
+          , IncludesAllDescendants
+          , IncludesRoot
+          , Value
+        >
+      , accumulation_key<Key,Tag,IncludesAllDescendants,IncludesRoot,Value>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2 = void
+      , typename AccumulationKey = accumulation_key<>
+    >
+    struct with_accumulation
+      : public
+        //[reference__with_accumulation__bases
+        with_accumulation_base<
+            with_accumulation<
+                BaseGenerator
+              , T1
+              , T2
+              , AccumulationKey
+            >
+          , BaseGenerator
+          , T1
+          , T2
+          , typename AccumulationKey::key
+          , typename AccumulationKey::tag
+          , typename AccumulationKey::includes_all_descendants
+          , typename AccumulationKey::includes_root
+          , typename AccumulationKey::value
+        >
+        //]
+    {
+        typedef with_accumulation_base<
+                    with_accumulation
+                  , BaseGenerator
+                  , T1
+                  , T2
+                  , typename AccumulationKey::key
+                  , typename AccumulationKey::tag
+                  , typename AccumulationKey::includes_all_descendants
+                  , typename AccumulationKey::includes_root
+                  , typename AccumulationKey::value
+                >
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(with_accumulation, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_accumulation__emplacement_ctor
+        template <typename ...Args>
+        explicit with_accumulation(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (with_accumulation, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename AccumulationKey
+    >
+    template <typename ...Args>
+    inline with_accumulation<
+        BaseGenerator
+      , T1
+      , T2
+      , AccumulationKey
+    >::with_accumulation(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+        super_t::on_post_emplacement_construct();
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__with_accumulation_gen
+namespace boost { namespace tree_node {
+
+    template <
+        typename BaseGenerator
+      , typename AccumulationKey = accumulation_key<>
+    >
+    struct with_accumulation_gen
+    {
+        template <typename Derived, typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef with_accumulation_base<
+                        Derived
+                      , BaseGenerator
+                      , T1
+                      , T2
+                      , typename AccumulationKey::key
+                      , typename AccumulationKey::tag
+                      , typename AccumulationKey::includes_all_descendants
+                      , typename AccumulationKey::includes_root
+                      , typename AccumulationKey::value
+                    >
+                    type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_WITH_ACCUMULATION_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/with_count.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_count.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,715 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_WITH_COUNT_HPP_INCLUDED
+#define BOOST_TREE_NODE_WITH_COUNT_HPP_INCLUDED
+
+#include <cstddef>
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/utility/value_init.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/tree_node/count_key.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    class with_count_base
+      : public
+        //[reference__with_count_base__bases
+        ::boost::mpl::eval_if<
+            ::std::tr1::is_void<T2>
+          , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+          , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+        >::type
+        //]
+    {
+        friend struct tree_node_base<Derived>;
+
+        typedef with_count_base<Derived,BaseGenerator,T1,T2,Count>
+                self;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    ::std::tr1::is_void<T2>
+                  , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+                  , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+                >::type
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+     private:
+        Count _count;
+
+     protected:
+        //[reference__with_count_base__derived_copy_ctor
+        with_count_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_count_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_count_base__emplacement_ctor
+        template <typename ...Args>
+        explicit with_count_base(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_WITH_COUNT_MACRO(z, n, Tuple)                        \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+          , _count(::boost::initialized_value)                               \
+        {                                                                    \
+            ++this->_count;                                                  \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_WITH_COUNT_MACRO
+          , (with_count_base, super_t)
+        )
+#undef BOOST_TREE_NODE_WITH_COUNT_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        ~with_count_base();
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        void copy_assign(Derived const& copy);
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+        void on_post_copy_or_move();
+
+        template <typename BooleanIntegralConstant>
+        void
+            on_post_inserted_impl(
+                iterator position
+              , BooleanIntegralConstant invalidates_sibling_positions
+            );
+
+        void on_post_erase_impl();
+
+        void on_post_clear_impl();
+
+        void on_post_rotate_left_impl();
+
+        void on_post_rotate_right_impl();
+
+     public:
+        //[reference__with_count_base__key_value_operator
+        Count const& operator[](count_key const&) const;
+        //]
+
+     private:
+        void _shallow_update();
+
+        static Count _get_count(const_iterator c_itr, const_iterator c_end);
+
+        static void _update_less_count(pointer p, Count const& difference);
+
+        static void _update_greater_count(pointer p, Count const& difference);
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    with_count_base<Derived,BaseGenerator,T1,T2,Count>::with_count_base(
+        Derived const& copy
+    ) : super_t(copy), _count(copy._count)
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    with_count_base<Derived,BaseGenerator,T1,T2,Count>::with_count_base(
+#if defined BOOST_NO_RVALUE_REFERENCES
+        ::boost::rv<Derived>& source
+    ) : super_t(source)
+#else
+        Derived&& source
+    ) : super_t(static_cast<Derived&&>(source))
+#endif
+      , _count(source._count)
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    template <typename ...Args>
+    with_count_base<Derived,BaseGenerator,T1,T2,Count>::with_count_base(
+        Args&& ...args
+    ) : super_t(::boost::forward<Args>(args)...)
+      , _count(::boost::initialized_value)
+    {
+        ++this->_count;
+    }
+#endif
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    with_count_base<Derived,BaseGenerator,T1,T2,Count>::~with_count_base()
+    {
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>::copy_assign(
+            Derived const& copy
+        )
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>::move_assign(
+            BOOST_RV_REF(Derived) source
+        )
+    {
+#if defined BOOST_NO_RVALUE_REFERENCES
+        super_t::move_assign(source);
+#else
+        super_t::move_assign(static_cast<Derived&&>(source));
+#endif
+//        this->_count = source._count;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    {
+        super_t::copy_assign(copy);
+//        this->_count = copy._count;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_copy_or_move()
+    {
+        super_t::on_post_copy_or_move();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    template <typename BooleanIntegralConstant>
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_inserted_impl(
+            iterator position
+          , BooleanIntegralConstant invalidates_sibling_positions
+        )
+    {
+        super_t::on_post_inserted_impl(
+            position
+          , invalidates_sibling_positions
+        );
+        self::_update_greater_count(this->get_derived(), this->_count);
+        this->on_post_propagate_value(count_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_erase_impl()
+    {
+        super_t::on_post_erase_impl();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_clear_impl()
+    {
+        super_t::on_post_clear_impl();
+        self::_update_less_count(this->get_derived(), --this->_count);
+        ++(this->_count = ::boost::initialized_value);
+        this->on_post_propagate_value(count_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_rotate_left_impl()
+    {
+        super_t::on_post_rotate_left_impl();
+
+        pointer p = this->get_parent_ptr();
+
+        if (p->get_right_child_ptr())
+        {
+            this->_count -= p->get_right_child_ptr()->_count;
+        }
+
+        if (this->get_left_child_ptr())
+        {
+            p->_count += this->get_left_child_ptr()->_count;
+        }
+
+        --this->_count;
+        ++p->_count;
+        this->on_post_propagate_value_once(count_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::on_post_rotate_right_impl()
+    {
+        super_t::on_post_rotate_right_impl();
+
+        pointer p = this->get_parent_ptr();
+
+        if (pointer l = p->get_left_child_ptr())
+        {
+            this->_count -= p->get_left_child_ptr()->_count;
+        }
+
+        if (this->get_right_child_ptr())
+        {
+            p->_count += this->get_right_child_ptr()->_count;
+        }
+
+        --this->_count;
+        ++p->_count;
+        this->on_post_propagate_value_once(count_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline Count const&
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>::operator[](
+            count_key const&
+        ) const
+    {
+        return this->_count;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    void with_count_base<Derived,BaseGenerator,T1,T2,Count>::_shallow_update()
+    {
+        Count new_count = self::_get_count(this->begin(), this->end());
+
+        if (++new_count < this->_count)
+        {
+            self::_update_less_count(
+                this->get_derived()
+              , this->_count - new_count
+            );
+            this->_count = new_count;
+            this->on_post_propagate_value(count_key());
+        }
+        else if (this->_count < new_count)
+        {
+            self::_update_greater_count(
+                this->get_derived()
+              , new_count - this->_count
+            );
+            this->_count = new_count;
+            this->on_post_propagate_value(count_key());
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    Count
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::_get_count(const_iterator c_itr, const_iterator c_end)
+    {
+        Count result = ::boost::initialized_value;
+
+        while (c_itr != c_end)
+        {
+            result += ::boost::tree_node::dereference_iterator(
+                c_itr
+            )._count;
+            ++c_itr;
+        }
+
+        return result;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::_update_less_count(pointer p, Count const& difference)
+    {
+        while ((p = p->get_parent_ptr()))
+        {
+            p->_count -= difference;
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    void
+        with_count_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >::_update_greater_count(pointer p, Count const& difference)
+    {
+        while ((p = p->get_parent_ptr()))
+        {
+            p->_count += difference;
+        }
+    }
+}}  // namespace boost::tree_node
+
+//[reference__with_count_base__get
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    Count const&
+        get(
+            with_count_base<Derived,BaseGenerator,T1,T2,Count> const& node
+          , count_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline Count const&
+        get(
+            with_count_base<Derived,BaseGenerator,T1,T2,Count> const& node
+          , count_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__with_count_base__get__key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,count_key>
+      , Count const&
+    >::type
+        get(with_count_base<Derived,BaseGenerator,T1,T2,Count> const& node);
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,count_key>
+      , Count const&
+    >::type
+        get(with_count_base<Derived,BaseGenerator,T1,T2,Count> const& node)
+    {
+        return node[count_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    struct has_key_impl<
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>
+      , count_key
+    > : ::boost::mpl::true_
+    {
+    };
+}}  // namespace boost::tree_node
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2 = void
+      , typename Count = ::std::size_t
+    >
+    struct with_count
+      : public
+        //[reference__with_count__bases
+        with_count_base<
+            with_count<BaseGenerator,T1,T2,Count>
+          , BaseGenerator
+          , T1
+          , T2
+          , Count
+        >
+        //]
+    {
+        typedef with_count_base<with_count,BaseGenerator,T1,T2,Count> super_t;
+        typedef typename super_t::traits traits;
+        typedef typename super_t::pointer pointer;
+        typedef typename super_t::const_pointer const_pointer;
+        typedef typename super_t::iterator iterator;
+        typedef typename super_t::const_iterator const_iterator;
+        typedef typename super_t::size_type size_type;
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(with_count, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_count__emplacement_ctor
+        template <typename ...Args>
+        explicit with_count(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (with_count, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename BaseGenerator, typename T1, typename T2, typename Count>
+    template <typename ...Args>
+    inline with_count<BaseGenerator,T1,T2,Count>::with_count(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+        super_t::on_post_emplacement_construct();
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__with_count_gen
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename Count = ::std::size_t>
+    struct with_count_gen
+    {
+        template <typename Derived, typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef with_count_base<Derived,BaseGenerator,T1,T2,Count> type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_WITH_COUNT_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/with_height.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_height.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,741 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_WITH_HEIGHT_HPP_INCLUDED
+#define BOOST_TREE_NODE_WITH_HEIGHT_HPP_INCLUDED
+
+#include <cstddef>
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/utility/value_init.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/tree_node/height_key.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    class with_height_base
+      : public
+        //[reference__with_height_base__bases
+        ::boost::mpl::eval_if<
+            ::std::tr1::is_void<T2>
+          , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+          , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+        >::type
+        //]
+    {
+        friend struct tree_node_base<Derived>;
+
+        typedef with_height_base<Derived,BaseGenerator,T1,T2,Height>
+                self;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    ::std::tr1::is_void<T2>
+                  , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+                  , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+                >::type
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+     private:
+        Height _height;
+
+     protected:
+        //[reference__with_height_base__derived_copy_ctor
+        with_height_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_height_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_height_base__emplacement_ctor
+        template <typename ...Args>
+        explicit with_height_base(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_WITH_HEIGHT_MACRO(z, n, Tuple)                       \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+          , _height(::boost::initialized_value)                              \
+        {                                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_WITH_HEIGHT_MACRO
+          , (with_height_base, super_t)
+        )
+#undef BOOST_TREE_NODE_WITH_HEIGHT_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        ~with_height_base();
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        void copy_assign(Derived const& copy);
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+        void on_post_copy_or_move();
+
+        template <typename BooleanIntegralConstant>
+        void
+            on_post_inserted_impl(
+                iterator position
+              , BooleanIntegralConstant invalidates_sibling_positions
+            );
+
+        void on_post_erase_impl();
+
+        void on_post_clear_impl();
+
+        void on_post_rotate_left_impl();
+
+        void on_post_rotate_right_impl();
+
+     public:
+        //[reference__with_height_base__key_value_operator
+        Height const& operator[](height_key const&) const;
+        //]
+
+     private:
+        void _shallow_update();
+
+        static Height
+            _get_max_height(const_iterator c_itr, const_iterator c_end);
+
+        static void _update_less_height(pointer p);
+
+        static void _update_greater_height(pointer p);
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    with_height_base<Derived,BaseGenerator,T1,T2,Height>::with_height_base(
+        Derived const& copy
+    ) : super_t(copy), _height(copy._height)
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    with_height_base<Derived,BaseGenerator,T1,T2,Height>::with_height_base(
+#if defined BOOST_NO_RVALUE_REFERENCES
+        ::boost::rv<Derived>& source
+    ) : super_t(source)
+#else
+        Derived&& source
+    ) : super_t(static_cast<Derived&&>(source))
+#endif
+      , _height(source._height)
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    template <typename ...Args>
+    with_height_base<Derived,BaseGenerator,T1,T2,Height>::with_height_base(
+        Args&& ...args
+    ) : super_t(::boost::forward<Args>(args)...)
+      , _height(::boost::initialized_value)
+    {
+    }
+#endif
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    with_height_base<Derived,BaseGenerator,T1,T2,Height>::~with_height_base()
+    {
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<Derived,BaseGenerator,T1,T2,Height>::copy_assign(
+            Derived const& copy
+        )
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<Derived,BaseGenerator,T1,T2,Height>::move_assign(
+            BOOST_RV_REF(Derived) source
+        )
+    {
+#if defined BOOST_NO_RVALUE_REFERENCES
+        super_t::move_assign(source);
+#else
+        super_t::move_assign(static_cast<Derived&&>(source));
+#endif
+//        this->_height = source._height;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<Derived,BaseGenerator,T1,T2,Height>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    {
+        super_t::copy_assign(copy);
+//        this->_height = copy._height;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_copy_or_move()
+    {
+        super_t::on_post_copy_or_move();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    template <typename BooleanIntegralConstant>
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_inserted_impl(
+            iterator position
+          , BooleanIntegralConstant invalidates_sibling_positions
+        )
+    {
+        super_t::on_post_inserted_impl(
+            position
+          , invalidates_sibling_positions
+        );
+        this->get_parent_ptr()->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_erase_impl()
+    {
+        super_t::on_post_erase_impl();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_clear_impl()
+    {
+        super_t::on_post_clear_impl();
+        this->_height = ::boost::initialized_value;
+        self::_update_less_height(this->get_derived());
+        this->on_post_propagate_value(height_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_rotate_left_impl()
+    {
+        super_t::on_post_rotate_left_impl();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::on_post_rotate_right_impl()
+    {
+        super_t::on_post_rotate_right_impl();
+        this->_shallow_update();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline Height const&
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::operator[](height_key const&) const
+    {
+        return this->_height;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    void
+        with_height_base<Derived,BaseGenerator,T1,T2,Height>::_shallow_update()
+    {
+        Height new_height = self::_get_max_height(this->begin(), this->end());
+
+        if (new_height < this->_height)
+        {
+            this->_height = new_height;
+            self::_update_less_height(this->get_derived());
+            this->on_post_propagate_value(height_key());
+        }
+        else if (this->_height < new_height)
+        {
+            this->_height = new_height;
+            self::_update_greater_height(this->get_derived());
+            this->on_post_propagate_value(height_key());
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    Height
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::_get_max_height(const_iterator c_itr, const_iterator c_end)
+    {
+        Height result = ::boost::initialized_value;
+
+        for (Height height_plus_1; c_itr != c_end; ++c_itr)
+        {
+            height_plus_1 = ::boost::tree_node::dereference_iterator(
+                c_itr
+            )._height;
+
+            if (result < ++height_plus_1)
+            {
+                result = height_plus_1;
+            }
+        }
+
+        return result;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::_update_less_height(pointer p)
+    {
+        Height new_height;
+
+        while ((p = p->get_parent_ptr()))
+        {
+            new_height = self::_get_max_height(p->begin(), p->end());
+
+            if (p->_height == new_height)
+            {
+                return;
+            }
+            else
+            {
+                // This is no longer the deepest branch.
+                p->_height = new_height;
+            }
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    void
+        with_height_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >::_update_greater_height(pointer p)
+    {
+        Height p_height = p->_height;
+
+        while ((p = p->get_parent_ptr()) && (p->_height < ++p_height))
+        {
+            // This is the new deepest branch.
+            p->_height = p_height;
+        }
+    }
+}}  // namespace boost::tree_node
+
+//[reference__with_height_base__get
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    Height const&
+        get(
+            with_height_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Height
+            > const& node
+          , height_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline Height const&
+        get(
+            with_height_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Height
+            > const& node
+          , height_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__with_height_base__get__key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,height_key>
+      , Height const&
+    >::type
+        get(
+            with_height_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Height
+            > const& node
+        );
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,height_key>
+      , Height const&
+    >::type
+        get(
+            with_height_base<
+                Derived
+              , BaseGenerator
+              , T1
+              , T2
+              , Height
+            > const& node
+        )
+    {
+        return node[height_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    struct has_key_impl<
+        with_height_base<Derived,BaseGenerator,T1,T2,Height>
+      , height_key
+    > : ::boost::mpl::true_
+    {
+    };
+}}  // namespace boost::tree_node
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2 = void
+      , typename Height = ::std::size_t
+    >
+    struct with_height
+      : public
+        //[reference__with_height__bases
+        with_height_base<
+            with_height<BaseGenerator,T1,T2,Height>
+          , BaseGenerator
+          , T1
+          , T2
+          , Height
+        >
+        //]
+    {
+        typedef with_height_base<with_height,BaseGenerator,T1,T2,Height>
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(with_height, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_height__emplacement_ctor
+        template <typename ...Args>
+        explicit with_height(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (with_height, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Height
+    >
+    template <typename ...Args>
+    inline with_height<BaseGenerator,T1,T2,Height>::with_height(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+        super_t::on_post_emplacement_construct();
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__with_height_gen
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename Height = ::std::size_t>
+    struct with_height_gen
+    {
+        template <typename Derived, typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef with_height_base<Derived,BaseGenerator,T1,T2,Height> type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_WITH_HEIGHT_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/with_position.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_position.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,544 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_WITH_POSITION_HPP_INCLUDED
+#define BOOST_TREE_NODE_WITH_POSITION_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/tree_node/position_key.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    class with_position_base
+      : public
+        //[reference__with_position_base__bases
+        ::boost::mpl::eval_if<
+            ::std::tr1::is_void<T2>
+          , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+          , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+        >::type
+        //]
+    {
+        friend struct tree_node_base<Derived>;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    ::std::tr1::is_void<T2>
+                  , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+                  , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+                >::type
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+        typedef typename super_t::size_type
+                size_type;
+
+     private:
+        iterator _position;
+
+     protected:
+        //[reference__with_position_base__derived_copy_ctor
+        with_position_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_position_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_position_base__emplacement_ctor
+        template <typename ...Args>
+        explicit with_position_base(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_WITH_POSITION_MACRO(z, n, Tuple)                     \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+          , _position()                                                      \
+        {                                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_WITH_POSITION_MACRO
+          , (with_position_base, super_t)
+        )
+#undef BOOST_TREE_NODE_WITH_POSITION_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        ~with_position_base();
+
+        void on_post_copy_or_move();
+
+        void on_post_inserted_impl(iterator position, ::boost::mpl::true_);
+
+        void on_post_inserted_impl(iterator position, ::boost::mpl::false_);
+
+     public:
+        //[reference__with_position_base__key_value_operator__const
+        const_iterator operator[](position_key const&) const;
+        //]
+
+        //[reference__with_position_base__key_value_operator
+        iterator operator[](position_key const&);
+        //]
+
+     private:
+        static void _set_child_positions(pointer to_parent);
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_position_base<Derived,BaseGenerator,T1,T2>::with_position_base(
+        Derived const& copy
+    ) : super_t(copy), _position()
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_position_base<Derived,BaseGenerator,T1,T2>::with_position_base(
+#if defined BOOST_NO_RVALUE_REFERENCES
+        ::boost::rv<Derived>& source
+    ) : super_t(source)
+#else
+        Derived&& source
+    ) : super_t(static_cast<Derived&&>(source))
+#endif
+      , _position()
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    template <typename ...Args>
+    with_position_base<Derived,BaseGenerator,T1,T2>::with_position_base(
+        Args&& ...args
+    ) : super_t(::boost::forward<Args>(args)...), _position()
+    {
+    }
+#endif
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_position_base<Derived,BaseGenerator,T1,T2>::~with_position_base()
+    {
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_position_base<Derived,BaseGenerator,T1,T2>::on_post_copy_or_move()
+    {
+        super_t::on_post_copy_or_move();
+        this->_set_child_positions(this->get_derived());
+        this->on_post_modify_value(position_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_position_base<Derived,BaseGenerator,T1,T2>::on_post_inserted_impl(
+            iterator position
+          , ::boost::mpl::true_ t
+        )
+    {
+        super_t::on_post_inserted_impl(position, t);
+        this->_position = position;
+        this->on_post_modify_value(position_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_position_base<Derived,BaseGenerator,T1,T2>::on_post_inserted_impl(
+            iterator position
+          , ::boost::mpl::false_ f
+        )
+    {
+        super_t::on_post_inserted_impl(position, f);
+        this->_set_child_positions(this->get_parent_ptr());
+
+        iterator itr_end = this->get_parent_ptr()->end();
+
+        for (
+            iterator itr = this->get_parent_ptr()->begin();
+            itr != itr_end;
+            ++itr
+        )
+        {
+            ::boost::tree_node::dereference_iterator(itr).on_post_modify_value(
+                position_key()
+            );
+        }
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename with_position_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::const_iterator
+        with_position_base<Derived,BaseGenerator,T1,T2>::operator[](
+            position_key const&
+        ) const
+    {
+        return this->_position;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename with_position_base<Derived,BaseGenerator,T1,T2>::iterator
+        with_position_base<Derived,BaseGenerator,T1,T2>::operator[](
+            position_key const&
+        )
+    {
+        return this->_position;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    void
+        with_position_base<Derived,BaseGenerator,T1,T2>::_set_child_positions(
+            pointer to_parent
+        )
+    {
+        iterator itr_end = to_parent->end();
+
+        for (iterator itr = to_parent->begin(); itr != itr_end; ++itr)
+        {
+            ::boost::tree_node::dereference_iterator(itr)._position = itr;
+        }
+    }
+}}  // namespace boost::tree_node
+
+//[reference__with_position_base__get__const
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename with_position_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::const_iterator
+        get(
+            with_position_base<Derived,BaseGenerator,T1,T2> const& node
+          , position_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename with_position_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::const_iterator
+        get(
+            with_position_base<Derived,BaseGenerator,T1,T2> const& node
+          , position_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__with_position_base__get
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename with_position_base<Derived,BaseGenerator,T1,T2>::iterator
+        get(
+            with_position_base<Derived,BaseGenerator,T1,T2>& node
+          , position_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename with_position_base<Derived,BaseGenerator,T1,T2>::iterator
+        get(
+            with_position_base<Derived,BaseGenerator,T1,T2>& node
+          , position_key const& key
+        )
+    {
+        return node[key];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__with_position_base__get__key__const
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,position_key>
+      , typename with_position_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+        >::const_iterator
+    >::type
+        get(with_position_base<Derived,BaseGenerator,T1,T2> const& node);
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,position_key>
+      , typename with_position_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+        >::const_iterator
+    >::type
+        get(with_position_base<Derived,BaseGenerator,T1,T2> const& node)
+    {
+        return node[position_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__with_position_base__get__key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,position_key>
+      , typename with_position_base<Derived,BaseGenerator,T1,T2>::iterator
+    >::type
+        get(with_position_base<Derived,BaseGenerator,T1,T2>& node);
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,position_key>
+      , typename with_position_base<Derived,BaseGenerator,T1,T2>::iterator
+    >::type
+        get(with_position_base<Derived,BaseGenerator,T1,T2>& node)
+    {
+        return node[position_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    struct has_key_impl<
+        with_position_base<Derived,BaseGenerator,T1,T2>
+      , position_key
+    > : ::boost::mpl::true_
+    {
+    };
+}}  // namespace boost::tree_node
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename T1, typename T2 = void>
+    struct with_position
+      : public
+        //[reference__with_position__bases
+        with_position_base<
+            with_position<BaseGenerator,T1,T2>
+          , BaseGenerator
+          , T1
+          , T2
+        >
+        //]
+    {
+        typedef with_position_base<with_position,BaseGenerator,T1,T2> super_t;
+        typedef typename super_t::traits traits;
+        typedef typename super_t::pointer pointer;
+        typedef typename super_t::const_pointer const_pointer;
+        typedef typename super_t::iterator iterator;
+        typedef typename super_t::const_iterator const_iterator;
+        typedef typename super_t::size_type size_type;
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(with_position, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_position__emplacement_ctor
+        template <typename ...Args>
+        explicit with_position(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (with_position, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename BaseGenerator, typename T1, typename T2>
+    template <typename ...Args>
+    inline with_position<BaseGenerator,T1,T2>::with_position(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...)
+    {
+        super_t::on_post_emplacement_construct();
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__with_position_gen
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator>
+    struct with_position_gen
+    {
+        template <typename Derived, typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef with_position_base<Derived,BaseGenerator,T1,T2> type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_WITH_POSITION_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/with_red_black_flag.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_red_black_flag.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,669 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+#define BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/tree_node/base.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/red_flag_key.hpp>
+#include <boost/tree_node/black_flag_key.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/repetition/repeat.hpp>
+#endif
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/move/move.hpp>
+#endif
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+//[reference__with_red_black_flag_base__put__red
+namespace boost { namespace tree_node {
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    class with_red_black_flag_base;
+    //->
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    void
+        put(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2>& node
+          , red_flag_key const& key
+          , bool value
+        );
+}}  // namespace boost::tree_node
+//]
+
+//[reference__with_red_black_flag_base__put__black
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    void
+        put(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2>& node
+          , black_flag_key const& key
+          , bool value
+        );
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    struct has_key_impl<
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>
+      , red_flag_key
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    struct has_key_impl<
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>
+      , black_flag_key
+    > : ::boost::mpl::true_
+    {
+    };
+}}  // namespace boost::tree_node
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    class with_red_black_flag_base
+      : public
+        //[reference__with_red_black_flag_base__bases
+        ::boost::mpl::eval_if<
+            ::std::tr1::is_void<T2>
+          , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+          , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+        >::type
+        //]
+    {
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    ::std::tr1::is_void<T2>
+                  , ::boost::mpl::apply_wrap2<BaseGenerator,Derived,T1>
+                  , ::boost::mpl::apply_wrap3<BaseGenerator,Derived,T1,T2>
+                >::type
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+
+     private:
+        bool _is_red;
+
+     protected:
+        //[reference__with_red_black_flag_base__derived_copy_ctor
+        with_red_black_flag_base(Derived const& copy);
+        //]
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        with_red_black_flag_base(BOOST_RV_REF(Derived) source);
+#endif
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_red_black_flag_base__emplacement_ctor
+        template <typename ...Args>
+        explicit with_red_black_flag_base(Args&& ...args);
+        //]
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_MACRO(z, n, Tuple)               \
+        BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER(z, n, Tuple)          \
+          , _is_red(false)                                                   \
+        {                                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_MACRO
+          , (with_red_black_flag_base, super_t)
+        )
+#undef BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+        ~with_red_black_flag_base();
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+        void copy_assign(Derived const& copy);
+#else
+        void copy_assign(BOOST_COPY_ASSIGN_REF(Derived) copy);
+
+        void move_assign(BOOST_RV_REF(Derived) source);
+#endif
+
+        void on_post_copy_or_move();
+
+     public:
+        //[reference__with_red_black_flag_base__key_value_operator__red
+        bool operator[](red_flag_key const&) const;
+        //]
+
+        //[reference__with_red_black_flag_base__key_value_operator__black
+        bool operator[](black_flag_key const&) const;
+        //]
+
+        //[reference__with_red_black_flag_base__set_red_flag
+        void set_red_flag(bool flag);
+        //]
+
+        //[reference__with_red_black_flag_base__set_black_flag
+        void set_black_flag(bool flag);
+        //]
+    };
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_red_black_flag_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::with_red_black_flag_base(Derived const& copy)
+      : super_t(copy), _is_red(copy._is_red)
+    {
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_red_black_flag_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::with_red_black_flag_base(
+#if defined BOOST_NO_RVALUE_REFERENCES
+        ::boost::rv<Derived>& source
+    ) : super_t(source)
+#else
+        Derived&& source
+    ) : super_t(static_cast<Derived&&>(source))
+#endif
+      , _is_red(source._is_red)
+    {
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    template <typename ...Args>
+    with_red_black_flag_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::with_red_black_flag_base(Args&& ...args)
+      : super_t(::boost::forward<Args>(args)...), _is_red(false)
+    {
+    }
+#endif
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    with_red_black_flag_base<
+        Derived
+      , BaseGenerator
+      , T1
+      , T2
+    >::~with_red_black_flag_base()
+    {
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::copy_assign(
+            Derived const& copy
+        )
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::move_assign(
+            BOOST_RV_REF(Derived) source
+        )
+    {
+#if defined BOOST_NO_RVALUE_REFERENCES
+        super_t::move_assign(source);
+#else
+        super_t::move_assign(static_cast<Derived&&>(source));
+#endif
+        this->_is_red = source._is_red;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::copy_assign(
+            BOOST_COPY_ASSIGN_REF(Derived) copy
+        )
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    {
+        super_t::copy_assign(copy);
+        this->_is_red = copy._is_red;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+        >::on_post_copy_or_move()
+    {
+        super_t::on_post_copy_or_move();
+        this->on_post_modify_value(red_flag_key());
+        this->on_post_modify_value(black_flag_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline bool
+        with_red_black_flag_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+        >::operator[](red_flag_key const&) const
+    {
+        return this->_is_red;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline bool
+        with_red_black_flag_base<
+            Derived
+          , BaseGenerator
+          , T1
+          , T2
+        >::operator[](black_flag_key const&) const
+    {
+        return !this->_is_red;
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::set_red_flag(
+            bool flag
+        )
+    {
+        this->_is_red = flag;
+        this->on_post_modify_value(red_flag_key());
+        this->on_post_modify_value(black_flag_key());
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::set_black_flag(
+            bool flag
+        )
+    {
+        this->_is_red = !flag;
+        this->on_post_modify_value(red_flag_key());
+        this->on_post_modify_value(black_flag_key());
+    }
+}}  // namespace boost::tree_node
+
+//[reference__with_red_black_flag_base__get__red
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    bool
+        get(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node
+          , red_flag_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline bool
+        get(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node
+          , red_flag_key const& key
+        )
+    {
+        return node[key];
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        put(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2>& node
+          , red_flag_key const& key
+          , bool value
+        )
+    {
+        node.set_red_flag(value);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__with_red_black_flag_base__get__black
+namespace boost { namespace tree_node {
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    bool
+        get(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node
+          , black_flag_key const& key
+        );
+
+    //<-
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >    //->
+
+    inline bool
+        get(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node
+          , black_flag_key const& key
+        )
+    {
+        return node[key];
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline void
+        put(
+            with_red_black_flag_base<Derived,BaseGenerator,T1,T2>& node
+          , black_flag_key const& key
+          , bool value
+        )
+    {
+        node.set_black_flag(value);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#if !defined BOOST_NO_SFINAE
+//[reference__with_red_black_flag_base__get__red_flag_key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,red_flag_key>
+      , bool
+    >::type
+        get(with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node);
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,red_flag_key>
+      , bool
+    >::type
+        get(with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node)
+    {
+        return node[red_flag_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__with_red_black_flag_base__get__black_flag_key
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,black_flag_key>
+      , bool
+    >::type
+        get(with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node);
+
+    //<-
+    template <
+        typename Key
+      , typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+    >
+    inline typename ::boost::enable_if<
+        ::std::tr1::is_same<Key,black_flag_key>
+      , bool
+    >::type
+        get(with_red_black_flag_base<Derived,BaseGenerator,T1,T2> const& node)
+    {
+        return node[black_flag_key()];
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+#endif  // BOOST_NO_SFINAE
+
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename T1, typename T2 = void>
+    struct with_red_black_flag
+      : public
+        //[reference__with_red_black_flag__bases
+        with_red_black_flag_base<
+            with_red_black_flag<BaseGenerator,T1,T2>
+          , BaseGenerator
+          , T1
+          , T2
+        >
+        //]
+    {
+        typedef with_red_black_flag_base<
+                    with_red_black_flag
+                  , BaseGenerator
+                  , T1
+                  , T2
+                >
+                super_t;
+        typedef typename super_t::traits
+                traits;
+        typedef typename super_t::pointer
+                pointer;
+        typedef typename super_t::const_pointer
+                const_pointer;
+        typedef typename super_t::iterator
+                iterator;
+        typedef typename super_t::const_iterator
+                const_iterator;
+
+        BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(with_red_black_flag, super_t)
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        //[reference__with_red_black_flag__emplacement_ctor
+        template <typename ...Args>
+        explicit with_red_black_flag(Args&& ...args);
+        //]
+#else
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+          , (with_red_black_flag, super_t)
+        )
+#endif
+    };
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+    template <typename BaseGenerator, typename T1, typename T2>
+    template <typename ...Args>
+    inline with_red_black_flag<BaseGenerator,T1,T2>::with_red_black_flag(
+        Args&& ...args
+    ) : super_t(::boost::forward<Args>(args)...)
+    {
+        super_t::on_post_emplacement_construct();
+    }
+#endif
+}}  // namespace boost::tree_node
+
+//[reference__with_red_black_flag_gen
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator>
+    struct with_red_black_flag_gen
+    {
+        template <typename Derived, typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef with_red_black_flag_base<Derived,BaseGenerator,T1,T2> type;
+        };
+    };
+}}  // namespace boost::tree_node
+//]
+
+#include <boost/tree_node/_detail/config_end.hpp>
+
+#endif  // BOOST_TREE_NODE_WITH_RED_BLACK_FLAG_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/assoc_iterator_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/assoc_iterator_functions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,81 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_ASSOC_ITERATOR_FUNCTIONS_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_ASSOC_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
+#include <iostream>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/post_order_desc_iterator.hpp>
+#include <boost/tree_node/depth_first_desc_iterator.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+
+template <typename NodeIterator, typename Function>
+void associative_iterator_out(NodeIterator itr, Function f, unsigned int n)
+{
+    for (unsigned int i = 0; itr; ++itr)
+    {
+        if (!i)
+        {
+            std::cout << std::endl << "            ";
+        }
+
+        f(itr->first, boost::tree_node::dereference_iterator(itr));
+
+        if (++i == n)
+        {
+            i = 0;
+        }
+    }
+}
+
+template <typename Node, typename Function>
+void associative_out_bf_pre_post(Node const& node, Function f, unsigned int n)
+{
+    std::cout << ';' << std::endl << "        emplacer[bf_d_vals]";
+    associative_iterator_out(
+        boost::tree_node::make_breadth_first_descendant_iterator(node)
+      , f
+      , n
+    );
+    std::cout << ';' << std::endl << "        emplacer[pre_d_vals]";
+    associative_iterator_out(
+        boost::tree_node::make_pre_order_descendant_iterator(node)
+      , f
+      , n
+    );
+    std::cout << ';' << std::endl << "        emplacer[post_d_vals]";
+    associative_iterator_out(
+        boost::tree_node::make_post_order_descendant_iterator(node)
+      , f
+      , n
+    );
+}
+
+template <typename Node, typename Function>
+void associative_out_df(Node const& node, Function f)
+{
+    std::cout << ';' << std::endl << "        emplacer[df_d_vals]";
+
+    for (
+        boost::tree_node::depth_first_descendant_iterator<Node const> itr(
+            node
+        );
+        itr;
+        ++itr
+    )
+    {
+        f(
+            itr->first
+          , boost::tree_node::dereference_iterator(itr)
+          , boost::tree_node::traversal_state(itr)
+        );
+    }
+}
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_ASSOC_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/associative_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/associative_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,944 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/associative_node.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/pre_order_iterator.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+#include <boost/tree_node/depth_first_iterator.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "type_definitions.hpp"
+#include "output_preamble.hpp"
+#include "output_functions.hpp"
+#include "iterator_functions.hpp"
+#include "assoc_iterator_functions.hpp"
+
+char const* names[] = {"able", "baker", "chuck", "dog", "easy", "fox"};
+
+template <typename Node>
+void initialize(Node& root)
+{
+    for (boost::tree_node::breadth_first_iterator<Node> itr(root); itr; ++itr)
+    {
+        BOOST_AUTO_TPL(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            for (std::size_t i = 0; i < data; ++i)
+            {
+                for (std::size_t j = 0; j + i < data; ++j)
+                {
+                    itr->emplace(names[j], i);
+                }
+            }
+        }
+    }
+}
+
+#if defined BOOST_NO_SFINAE
+template <typename DNode>
+void out_with_it(DNode const& d_node)
+{
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 6);
+    associative_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 3);
+    associative_out_df(d_node, output_tree<boost::mpl::false_>(2, 5, true));
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+}
+#else
+template <typename DNode, typename ANode>
+void out_with_them(DNode const& d_node, ANode const& a_node)
+{
+    std::cout << std::endl << "#if defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 6);
+    associative_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 3);
+    associative_out_df(d_node, output_tree<boost::mpl::false_>(2, 5, true));
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+    std::cout << "#else  // !defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(a_node, output_node<boost::mpl::true_>(), 2);
+    associative_out_bf_pre_post(a_node, output_node<boost::mpl::true_>(), 2);
+    associative_out_df(a_node, output_tree<boost::mpl::true_>(4, 7, false));
+    iterator_out_df(a_node, output_tree<boost::mpl::true_>(4, 7, false));
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+}
+#endif
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+template <typename FNode>
+void out_with_all(FNode const& f_node)
+{
+    iterator_out_bf_pre_post(f_node, output_uint_char_node(), 5);
+    associative_out_bf_pre_post(f_node, output_uint_char_node(), 3);
+    associative_out_df(f_node, output_uint_char_tree(4, 9, false));
+    iterator_out_df(f_node, output_uint_char_tree(4, 9, false));
+}
+#endif
+
+template <typename Selector>
+void output_driver()
+{
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::with_count_gen<
+                        boost::tree_node::associative_node_gen<Selector>
+                    >
+                >
+              , char const*
+              , double
+            >
+            DNode;
+
+    DNode d_root(5.0);
+
+    initialize(d_root);
+
+#if !defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::with_height_gen<
+                    boost::tree_node::with_accumulation_gen<
+                        boost::tree_node::with_position_gen<
+                            boost::tree_node::with_accumulation_gen<
+                                boost::tree_node::with_count_gen<
+                                    boost::tree_node::with_accumulation_gen<
+                                        boost::tree_node::associative_node_gen<
+                                            Selector
+                                        >
+                                    >
+                                >
+                              , AccuAccuKey
+                            >
+                        >
+                      , AccuCountKey
+                    >
+                >
+              , char const*
+              , double
+              , AccuHeightKey
+            >
+            ANode;
+
+    ANode a_root(5.0);
+
+    initialize(a_root);
+#endif  // BOOST_NO_SFINAE
+
+    std::cout << std::endl << "template <typename Selector>";
+    std::cout << std::endl << (
+        boost::is_unique_associative_selector<Selector>::value
+      ? "void test_unique_associative()"
+      : "void test_multiple_associative()"
+    ) << std::endl << '{' << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << "#if defined BOOST_NO_SFINAE" << std::endl;
+#endif
+    std::cout << "    typedef boost::tree_node::with_height<" << std::endl << (
+        "                boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                    boost::tree_node::with_count_gen<"
+    ) << std::endl << "                        ";
+    std::cout << "boost::tree_node::associative_node_gen<Selector>";
+    std::cout << std::endl << "                    >" << std::endl;
+    std::cout << "                >" << std::endl;
+    std::cout << "              , char const*" << std::endl;
+    std::cout << "              , double" << std::endl;
+    std::cout << "            >" << std::endl;
+    std::cout << "            ANode;" << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << "#else  // !defined BOOST_NO_SFINAE" << std::endl << (
+        "    typedef boost::tree_node::with_accumulation<"
+    ) << std::endl << "                boost::tree_node::with_height_gen<";
+    std::cout << std::endl << (
+        "                    boost::tree_node::with_accumulation_gen<"
+    ) << std::endl << (
+        "                        boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                            boost::tree_node::with_accumulation_gen<"
+    ) << std::endl << (
+        "                                boost::tree_node::with_count_gen<"
+    ) << std::endl << "                                    ";
+    std::cout << "boost::tree_node::with_accumulation_gen<" << std::endl << (
+        "                                        "
+    ) << "boost::tree_node::associative_node_gen<" << std::endl;
+    std::cout << "                                            Selector";
+    std::cout << std::endl << "                                        >";
+    std::cout << std::endl << "                                    >";
+    std::cout << std::endl << "                                >" << std::endl;
+    std::cout << "                              , AccuAccuKey" << std::endl;
+    std::cout << "                            >" << std::endl;
+    std::cout << "                        >" << std::endl;
+    std::cout << "                      , AccuCountKey" << std::endl;
+    std::cout << "                    >" << std::endl;
+    std::cout << "                >" << std::endl;
+    std::cout << "              , char const*" << std::endl;
+    std::cout << "              , double" << std::endl;
+    std::cout << "              , AccuHeightKey" << std::endl;
+    std::cout << "            >" << std::endl << "            ANode;";
+    std::cout << std::endl << "#endif  // BOOST_NO_SFINAE";
+#endif  // BOOST_NO_SFINAE
+    output_container_type_preamble();
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    typename ANode::traits::key_type";
+    std::cout << std::endl << "                  , BOOST_TYPEOF_TPL(";
+    std::cout << std::endl << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::data_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::height_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::count_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                        >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                >" << std::endl << "            >::type";
+    std::cout << std::endl << "            KeyValues;" << std::endl;
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    boost::tree_node::traversal_state";
+    std::cout << std::endl << (
+        "                  , typename ANode::traits::key_type"
+    ) << std::endl << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::data_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::height_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << (
+        "                          , boost::tree_node::count_key()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                        >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                >" << std::endl << "            >::type";
+    std::cout << std::endl << "            DFKeyValues;" << std::endl;
+    std::cout << std::endl << "    ANode a_root(5.0);" << std::endl;
+    std::cout << std::endl << "    BOOST_CHECK(" << std::endl;
+    std::cout << "        !a_root.get_parent_ptr()" << std::endl;
+    std::cout << "//      , \"Parent member uninitialized.\"" << std::endl;
+    std::cout << "    );" << std::endl << std::endl;
+    std::cout << "    initialize<Selector>(a_root);" << std::endl << std::endl;
+    std::cout << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals;" << std::endl;
+    std::cout << "        KeyValues bf_d_vals, pre_d_vals, post_d_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFKeyValues df_d_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_associative_node(" << std::endl;
+    std::cout << "            a_root" << std::endl;
+    std::cout << "          , bf_vals" << std::endl;
+    std::cout << "          , bf_d_vals" << std::endl;
+    std::cout << "          , pre_vals" << std::endl;
+    std::cout << "          , pre_d_vals" << std::endl;
+    std::cout << "          , post_vals" << std::endl;
+    std::cout << "          , post_d_vals" << std::endl;
+    std::cout << "          , df_vals" << std::endl;
+    std::cout << "          , df_d_vals" << std::endl;
+    std::cout << "        );" << std::endl << "    }" << std::endl;
+
+    {
+        typename DNode::iterator d_child_itr(
+            boost::tree_node::dereference_iterator(
+                d_root.find(names[2])
+            ).insert(names[5], d_root)
+        );
+#if !defined BOOST_NO_SFINAE
+        typename ANode::iterator a_child_itr(
+            boost::tree_node::dereference_iterator(
+                a_root.find(names[2])
+            ).insert(names[5], a_root)
+        );
+#endif
+
+        std::cout << "    {" << std::endl << "        ANode a_copy(a_root);";
+        std::cout << std::endl << (
+            "        boost::tree_node::breadth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            bf_root_itr(a_root), bf_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::breadth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::pre_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            pre_root_itr(a_root), pre_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::pre_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::post_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            post_root_itr(a_root), post_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::post_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            post_d_root_itr(a_root), post_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::depth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            df_root_itr(a_root), df_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::depth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            df_d_root_itr(a_root), df_d_copy_itr(a_copy);"
+        ) << std::endl << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(bf_root_itr, bf_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << std::endl << "      " << (
+            "      test_associative_node_copies(bf_d_root_itr, bf_d_copy_itr)"
+        ) << std::endl << "        );" << std::endl << "        " << (
+            "BOOST_CHECK(test_node_copies(pre_root_itr, pre_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << std::endl << "       " << (
+            "     test_associative_node_copies(pre_d_root_itr, pre_d_copy_itr)"
+        ) << std::endl << "        );" << std::endl << "        " << (
+            "BOOST_CHECK(test_node_copies(post_root_itr, post_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << std::endl << "       " << (
+            "     test_associative_node_copies(post_d_root_itr, post_d_copy_it"
+        ) << "r)" << std::endl << "        );" << std::endl << "        " << (
+            "BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << std::endl << "       " << (
+            "     test_associative_node_copies(df_d_root_itr, df_d_copy_itr)"
+        ) << std::endl << "        );" << std::endl << "    }" << std::endl;
+        std::cout << std::endl << "    {" << std::endl << (
+            "        typename ANode::iterator a_child_itr("
+        ) << std::endl << "          boost::tree_node::dereference_iterator(";
+        std::cout << std::endl << "            a_root.find(names[2])";
+        std::cout << std::endl << "          ).insert(names[5], a_root)";
+        std::cout << std::endl << "        );" << std::endl << (
+            "        Values bf_vals, pre_vals, post_vals;"
+        ) << std::endl;
+        std::cout << "        KeyValues bf_d_vals, pre_d_vals, post_d_vals;";
+        std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+        std::cout << "        DFKeyValues df_d_vals;" << std::endl;
+        std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_associative_node(" << std::endl;
+        std::cout << "            a_root" << std::endl;
+        std::cout << "          , bf_vals" << std::endl;
+        std::cout << "          , bf_d_vals" << std::endl;
+        std::cout << "          , pre_vals" << std::endl;
+        std::cout << "          , pre_d_vals" << std::endl;
+        std::cout << "          , post_vals" << std::endl;
+        std::cout << "          , post_d_vals" << std::endl;
+        std::cout << "          , df_vals" << std::endl;
+        std::cout << "          , df_d_vals" << std::endl;
+        std::cout << "        );" << std::endl << std::endl;
+
+        d_root = boost::tree_node::dereference_iterator(d_child_itr);
+#if !defined BOOST_NO_SFINAE
+        a_root = boost::tree_node::dereference_iterator(a_child_itr);
+#endif
+        std::cout << "        a_root = boost::tree_node::";
+        std::cout << "dereference_iterator(a_child_itr);" << std::endl;
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        bf_d_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        pre_d_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        post_d_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+        std::cout << "        df_d_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_associative_node(" << std::endl;
+        std::cout << "            a_root" << std::endl;
+        std::cout << "          , bf_vals" << std::endl;
+        std::cout << "          , bf_d_vals" << std::endl;
+        std::cout << "          , pre_vals" << std::endl;
+        std::cout << "          , pre_d_vals" << std::endl;
+        std::cout << "          , post_vals" << std::endl;
+        std::cout << "          , post_d_vals" << std::endl;
+        std::cout << "          , df_vals" << std::endl;
+        std::cout << "          , df_d_vals" << std::endl;
+        std::cout << "        );" << std::endl << std::endl;
+
+        if (boost::is_unique_associative_selector<Selector>::value)
+        {
+            boost::tree_node::dereference_iterator(
+                d_child_itr = d_root.find(names[2])
+            ) = d_root;
+#if !defined BOOST_NO_SFINAE
+            boost::tree_node::dereference_iterator(
+                a_child_itr = a_root.find(names[2])
+            ) = a_root;
+#endif
+            std::cout << "        a_child_itr = a_root.find(names[2]);";
+            std::cout << std::endl;
+        }
+        else
+        {
+            d_child_itr = boost::begin(d_root.equal_range(names[2]));
+
+            while (boost::tree_node::dereference_iterator(d_child_itr).empty())
+            {
+                ++d_child_itr;
+            }
+
+            d_child_itr = boost::begin(
+                boost::tree_node::dereference_iterator(
+                    d_child_itr
+                ).equal_range(names[1])
+            );
+            boost::tree_node::dereference_iterator(d_child_itr) = d_root;
+#if !defined BOOST_NO_SFINAE
+            a_child_itr = boost::begin(a_root.equal_range(names[2]));
+
+            while (boost::tree_node::dereference_iterator(a_child_itr).empty())
+            {
+                ++a_child_itr;
+            }
+
+            a_child_itr = boost::begin(
+                boost::tree_node::dereference_iterator(
+                    a_child_itr
+                ).equal_range(names[1])
+            );
+            boost::tree_node::dereference_iterator(a_child_itr) = a_root;
+#endif
+            std::cout << "        a_child_itr = boost::begin(a_root.equal";
+            std::cout << "_range(names[2]));" << std::endl << std::endl << (
+                "        while (boost::tree_node::dereference_iterator(a_"
+            ) << "child_itr).empty())" << std::endl << "        {";
+            std::cout << std::endl << "            ++a_child_itr;";
+            std::cout << std::endl << "        }" << std::endl;
+            std::cout << std::endl << (
+                "        a_child_itr = boost::begin("
+            ) << std::endl << (
+                "            boost::tree_node::dereference_iterator("
+            ) << std::endl << "                a_child_itr" << std::endl;
+            std::cout << "            ).equal_range(names[1])";
+            std::cout << std::endl << "        );" << std::endl;
+        }
+
+        std::cout << "        boost::tree_node::dereference_iterator";
+        std::cout << "(a_child_itr) = a_root;" << std::endl;
+        std::cout << "        test_associative_node(" << std::endl;
+        std::cout << "            boost::tree_node::dereference_iterator";
+        std::cout << "(a_child_itr)" << std::endl;
+        std::cout << "          , bf_vals" << std::endl;
+        std::cout << "          , bf_d_vals" << std::endl;
+        std::cout << "          , pre_vals" << std::endl;
+        std::cout << "          , pre_d_vals" << std::endl;
+        std::cout << "          , post_vals" << std::endl;
+        std::cout << "          , post_d_vals" << std::endl;
+        std::cout << "          , df_vals" << std::endl;
+        std::cout << "          , df_d_vals" << std::endl;
+        std::cout << "        );" << std::endl << std::endl;
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        bf_d_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        pre_d_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        post_d_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+        std::cout << "        df_d_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_associative_node(" << std::endl;
+        std::cout << "            a_root" << std::endl;
+        std::cout << "          , bf_vals" << std::endl;
+        std::cout << "          , bf_d_vals" << std::endl;
+        std::cout << "          , pre_vals" << std::endl;
+        std::cout << "          , pre_d_vals" << std::endl;
+        std::cout << "          , post_vals" << std::endl;
+        std::cout << "          , post_d_vals" << std::endl;
+        std::cout << "          , df_vals" << std::endl;
+        std::cout << "          , df_d_vals" << std::endl << "        );";
+        std::cout << std::endl << "        BOOST_CHECK(" << std::endl << (
+            "            boost::tree_node::dereference_iterator("
+        ) << std::endl << "                a_child_itr" << std::endl;
+        std::cout << "            ).erase(names[1]) == ";
+        std::cout << boost::tree_node::dereference_iterator(
+            d_child_itr
+        ).erase(names[1]) << std::endl << "        );" << std::endl;
+#if !defined BOOST_NO_SFINAE
+        boost::tree_node::dereference_iterator(a_child_itr).erase(names[1]);
+#endif
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        bf_d_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        pre_d_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        post_d_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+        std::cout << "        df_d_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_associative_node(" << std::endl;
+        std::cout << "            a_root" << std::endl;
+        std::cout << "          , bf_vals" << std::endl;
+        std::cout << "          , bf_d_vals" << std::endl;
+        std::cout << "          , pre_vals" << std::endl;
+        std::cout << "          , pre_d_vals" << std::endl;
+        std::cout << "          , post_vals" << std::endl;
+        std::cout << "          , post_d_vals" << std::endl;
+        std::cout << "          , df_vals" << std::endl;
+        std::cout << "          , df_d_vals" << std::endl << "        );";
+    }
+
+    std::cout << std::endl << "    }";
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::associative_node_gen<Selector>
+              , char const*
+              , DataMap
+              , AccuYourUintKey
+            >
+            FNode;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO_TPL(
+            data
+          , boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(itr)
+            )
+        );
+
+        if (1 < data)
+        {
+            for (unsigned int i = 0; i < data; ++i)
+            {
+                for (std::size_t j = 0; j + i < data; ++j)
+                {
+                    itr->emplace(
+                        names[j]
+                      , boost::fusion::make_pair<example_keys::your_uint>(i)
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + i
+                        )
+                    );
+                }
+            }
+        }
+    }
+
+    std::cout << std::endl << std::endl << (
+        "#if defined BOOST_TREE_NODE_CAN_USE_FUSION"
+    ) << std::endl << "    typedef boost::tree_node::with_accumulation<";
+    std::cout << std::endl << (
+        "                boost::tree_node::associative_node_gen<Selector>"
+    ) << std::endl << "              , char const*" << std::endl;
+    std::cout << "              , DataMap" << std::endl;
+    std::cout << "              , AccuYourUintKey" << std::endl;
+    std::cout << "            >" << std::endl << "            FNode;";
+    output_container_fused_type_preamble();
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl << (
+        "                    typename FNode::traits::key_type"
+    ) << std::endl << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_uint"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            MoreKeyValues;" << std::endl;
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    boost::tree_node::traversal_state";
+    std::cout << std::endl << (
+        "                  , typename FNode::traits::key_type"
+    ) << std::endl << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        boost::tree_node::get<" << std::endl;
+    std::cout << "                            example_keys::your_uint";
+    std::cout << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            DFMoreKeyValues;" << std::endl << std::endl;
+    std::cout << "    FNode f_root(" << std::endl << (
+        "        boost::fusion::make_pair<example_keys::your_uint>(5)"
+    ) << std::endl << (
+        "      , boost::fusion::make_pair<example_keys::your_char>(\'5\')"
+    ) << std::endl << "    );" << std::endl << std::endl;
+    std::cout << "    for (" << std::endl << (
+        "        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);"
+    ) << std::endl << "        itr;" << std::endl << "        ++itr";
+    std::cout << std::endl << "    )" << std::endl << "    {" << std::endl;
+    std::cout << "        BOOST_AUTO_TPL(" << std::endl;
+    std::cout << "            data" << std::endl << (
+        "          , boost::tree_node::get<example_keys::your_uint>("
+    ) << std::endl << (
+        "                boost::tree_node::dereference_iterator(itr)"
+    ) << std::endl << "            )" << std::endl << "        );";
+    std::cout << std::endl << std::endl << "        if (1 < data)";
+    std::cout << std::endl << "        {" << std::endl;
+    std::cout << "            for (unsigned int i = 0; i < data; ++i)";
+    std::cout << std::endl << "            {" << std::endl << (
+        "                for (std::size_t j = 0; j + i < data; ++j)"
+    ) << std::endl << "                {" << std::endl;
+    std::cout << "                    itr->emplace(" << std::endl;
+    std::cout << "                        names[j]" << std::endl << (
+        "                      , boost::fusion::make_pair<example_keys::your_"
+    ) << "uint>(i)" << std::endl << "                      " << (
+        ", boost::fusion::make_pair<example_keys::your_char>("
+    ) << std::endl << "                            '0' + i" << std::endl;
+    std::cout << "                        )" << std::endl;
+    std::cout << "                    );" << std::endl << "                }";
+    std::cout << std::endl << "            }" << std::endl << "        }";
+    std::cout << std::endl << "    }" << std::endl;
+    std::cout << std::endl << "    {" << std::endl;
+    std::cout << "        MoreValues bf_vals, pre_vals, post_vals;";
+    std::cout << std::endl << (
+        "        MoreKeyValues bf_d_vals, pre_d_vals, post_d_vals;"
+    ) << std::endl << "        DFMoreKeyValues df_d_vals;" << std::endl;
+    std::cout << "        DFMoreValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+    out_with_all(f_root);
+    std::cout << "        test_f_associative_node(" << std::endl;
+    std::cout << "            f_root" << std::endl << "          , bf_vals";
+    std::cout << std::endl << "          , bf_d_vals" << std::endl;
+    std::cout << "          , pre_vals" << std::endl;
+    std::cout << "          , pre_d_vals" << std::endl;
+    std::cout << "          , post_vals" << std::endl;
+    std::cout << "          , post_d_vals" << std::endl;
+    std::cout << "          , df_vals" << std::endl << "          , df_d_vals";
+    std::cout << std::endl << "        );" << std::endl << std::endl;
+
+    put(
+        boost::tree_node::dereference_iterator(f_root.find(names[2]))
+      , example_keys::your_uint()
+      , 7
+    );
+    std::cout << "        put(" << std::endl << "            boost::tree_node";
+    std::cout << "::dereference_iterator(f_root.find(names[2]))" << std::endl;
+    std::cout << "          , example_keys::your_uint()" << std::endl;
+    std::cout << "          , 7" << std::endl << "        );" << std::endl;
+    std::cout << "        bf_vals.clear();" << std::endl;
+    std::cout << "        bf_d_vals.clear();" << std::endl;
+    std::cout << "        pre_vals.clear();" << std::endl;
+    std::cout << "        pre_d_vals.clear();" << std::endl;
+    std::cout << "        post_vals.clear();" << std::endl;
+    std::cout << "        post_d_vals.clear();" << std::endl;
+    std::cout << "        df_vals.clear();" << std::endl;
+    std::cout << "        df_d_vals.clear();" << std::endl;
+    out_with_all(f_root);
+    std::cout << "        test_f_associative_node(" << std::endl;
+    std::cout << "            f_root" << std::endl << "          , bf_vals";
+    std::cout << std::endl << "          , bf_d_vals" << std::endl;
+    std::cout << "          , pre_vals" << std::endl;
+    std::cout << "          , pre_d_vals" << std::endl;
+    std::cout << "          , post_vals" << std::endl;
+    std::cout << "          , post_d_vals" << std::endl;
+    std::cout << "          , df_vals" << std::endl << "          , df_d_vals";
+    std::cout << std::endl << "        );" << std::endl << "    }";
+    std::cout  << std::endl<< "#endif  // BOOST_TREE_NODE_CAN_USE_FUSION";
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    std::cout << std::endl << '}' << std::endl;
+}
+
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors_typeof.hpp>
+#include <boost/container_gen/c_str_cmp_selectors_typeof.hpp>
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/ptr_container/ptr_map.hpp>
+#elif defined LIBS_TREE_NODE_EXAMPLE_ASSOCIATIVE_NODE_USE_FLAT_MAP
+#include <boost/typeof/boost/container/flat_map.hpp>
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/mpl/bool.hpp>
+#include <boost/typeof/boost/container/map.hpp>
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else  // !defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/c_str_cmp_selectors.hpp>
+#endif  // BOOST_TYPEOF_EMULATION
+
+int main()
+{
+    output_copyright_and_config_preamble();
+    output_header_and_type_preamble();
+    std::cout << "#include <boost/tree_node/typeof/associative_node.hpp>";
+    std::cout << std::endl << (
+        "#include <boost/container_gen/is_unique_assoc_selector.hpp>"
+    ) << std::endl << std::endl << "char const* names[] = {\"able\"," << (
+        " \"baker\", \"chuck\", \"dog\", \"easy\", \"fox\"};"
+    ) << std::endl << std::endl << "template <typename Select, typename Node>";
+    std::cout << std::endl << "void initialize(Node& root)" << std::endl;
+    std::cout << '{' << std::endl << (
+        "    for (boost::tree_node::breadth_first_iterator<Node> itr(root);"
+    ) << " itr; ++itr)" << std::endl << "    {" << std::endl << "        " << (
+        "BOOST_AUTO_TPL(data, get(*itr, boost::tree_node::data_key()));"
+    ) << std::endl << std::endl << "        if (1 < data)" << std::endl;
+    std::cout << "        {" << std::endl;
+    std::cout << "            for (std::size_t i = 0; i < data; ++i)";
+    std::cout << std::endl << "            {" << std::endl;
+    std::cout << "                for (std::size_t j = 0; j + i < data; ++j)";
+    std::cout << std::endl << "                {" << std::endl << "      " << (
+        "              typename Node::iterator find_itr(itr->find(names[j]));"
+    ) << std::endl << (
+        "                    bool not_found = find_itr == itr->end();"
+    ) << std::endl << (
+        "                    typename Node::iterator child_itr("
+    ) << std::endl << (
+        "                        itr->emplace(names[j], i)"
+    ) << std::endl << "                    );" << std::endl;
+    std::cout << "                    Node& child(" << std::endl << (
+        "                        boost::tree_node::dereference_iterator"
+    ) << "(child_itr)" << std::endl << "                    );" << std::endl;
+    std::cout << "                    Node const& const_child(child);";
+    std::cout << std::endl << std::endl << (
+        "                    if (not_found)"
+    ) << std::endl << "                    {" << std::endl;
+    std::cout << "                        typename Node::pointer child_ptr(";
+    std::cout << std::endl << (
+        "                            child.get_parent_ptr()"
+    ) << std::endl << "                        );" << std::endl;
+    std::cout << "                        BOOST_CHECK(" << std::endl;
+    std::cout << "                            child_ptr == &*itr" << std::endl;
+    std::cout << "//                          , \"Ctor not linking child to";
+    std::cout << " parent.\"" << std::endl << "                        );";
+    std::cout << std::endl << "                        BOOST_CHECK(";
+    std::cout << std::endl << (
+        "                            child_ptr == const_child.get_parent_ptr()"
+    ) << std::endl << (
+        "//                          , \"Why are these pointers different?\""
+    ) << std::endl << "                        );" << std::endl;
+    std::cout << "                    }" << std::endl;
+    std::cout << "                    else if (" << std::endl;
+    std::cout << "                        boost::";
+    std::cout << "is_unique_associative_selector<Select>::value" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                    {" << std::endl;
+    std::cout << "                        BOOST_CHECK(" << std::endl << (
+        "                            find_itr->first == child_itr->first"
+    ) << std::endl;
+    std::cout << "//                          , \"Keys do not match.\"";
+    std::cout << std::endl << "                        );" << std::endl;
+    std::cout << "                        BOOST_CHECK(" << std::endl;
+    std::cout << "                            get(" << std::endl << "    " << (
+        "                            boost::tree_node::dereference_iterator("
+    ) << std::endl;
+    std::cout << "                                    find_itr" << std::endl;
+    std::cout << "                                )" << std::endl << (
+        "                              , boost::tree_node::data_key()"
+    ) << std::endl << "                            ) == get(" << std::endl;
+    std::cout << "                                const_child";
+    std::cout << std::endl << (
+        "                              , boost::tree_node::data_key()"
+    ) << std::endl << "                            )" << std::endl << (
+        "//                          , \"Ctor not linking parent to child.\""
+    ) << std::endl << "                        );" << std::endl;
+    std::cout << "                    }" << std::endl << "                }";
+    std::cout << std::endl << "            }" << std::endl << "        }";
+    std::cout << std::endl << "    }" << std::endl << '}' << std::endl;
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    output_driver<
+        boost::ptr_map_selector<boost::c_str_ordering_selector>
+    >();
+    output_driver<
+        boost::ptr_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#elif defined LIBS_TREE_NODE_EXAMPLE_ASSOCIATIVE_NODE_USE_FLAT_MAP
+    output_driver<
+        boost::flat_map_selector<boost::c_str_ordering_selector>
+    >();
+    output_driver<
+        boost::flat_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#else
+    output_driver<boost::map_selector<boost::mpl::true_> >();
+    output_driver<boost::multimap_selector<boost::mpl::true_> >();
+#endif
+
+    std::cout << std::endl << "#if defined BOOST_MSVC" << std::endl;
+    std::cout << "   #pragma warning (pop)" << std::endl;
+    std::cout << "#endif" << std::endl << std::endl;
+    std::cout << "#if defined BOOST_TYPEOF_EMULATION" << std::endl << (
+        "#include <boost/container_gen/selectors_typeof.hpp>"
+    ) << std::endl << (
+        "#include <boost/container_gen/c_str_cmp_selectors_typeof.hpp>"
+    ) << std::endl << (
+        "#include <boost/typeof/boost/ptr_container/ptr_map.hpp>"
+    ) << std::endl << (
+        "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"
+    ) << std::endl;
+    std::cout << "#include <boost/typeof/boost/mpl/bool.hpp>" << std::endl << (
+        "#include <boost/typeof/boost/container/map.hpp>"
+    ) << std::endl;
+    std::cout << "#include <boost/typeof/boost/container/flat_map.hpp>";
+    std::cout << std::endl << "#endif" << std::endl;
+    std::cout << "#else  // !defined BOOST_TYPEOF_EMULATION" << std::endl;
+    std::cout << "#include <boost/container_gen/selectors.hpp>" << std::endl;
+    std::cout << "#include <boost/container_gen/c_str_cmp_selectors.hpp>";
+    std::cout << std::endl << "#endif  // BOOST_TYPEOF_EMULATION" << std::endl;
+    std::cout << std::endl << "int test_main(int argc, char** argv)";
+    std::cout << std::endl << '{' << std::endl << (
+        "    test_unique_associative<"
+    ) << std::endl << (
+        "        boost::ptr_map_selector<boost::c_str_ordering_selector>"
+    ) << std::endl << "    >();" << std::endl << (
+        "    test_multiple_associative<"
+    ) << std::endl << (
+        "        boost::ptr_multimap_selector<boost::c_str_ordering_selector>"
+    ) << std::endl << "    >();" << std::endl;
+    std::cout << "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION";
+    std::cout << std::endl << "    test_unique_associative<" << std::endl;
+    std::cout << "        boost::map_selector<boost::mpl::true_,";
+    std::cout << "boost::c_str_ordering_selector>" << std::endl << "    >();";
+    std::cout << std::endl << "    test_multiple_associative<" << std::endl;
+    std::cout << "        boost::multimap_selector<" << std::endl;
+    std::cout << "            boost::mpl::true_" << std::endl;
+    std::cout << "          , boost::c_str_ordering_selector" << std::endl;
+    std::cout << "        >" << std::endl << "    >();" << std::endl;
+    std::cout << "    test_unique_associative<" << std::endl << (
+        "        boost::flat_map_selector<boost::c_str_ordering_selector>"
+    ) << std::endl << "    >();" << std::endl << (
+        "    test_multiple_associative<"
+    ) << std::endl << (
+        "        boost::flat_multimap_selector<boost::c_str_ordering_selector>"
+    ) << std::endl << "    >();" << std::endl << "#endif" << std::endl;
+    std::cout << std::endl << "    return 0;" << std::endl;
+    std::cout << '}' << std::endl << std::endl;
+
+    return 0;
+}
+
Added: sandbox/tree_node/libs/tree_node/example/binary_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/binary_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,735 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/binary_node.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "type_definitions.hpp"
+#include "output_preamble.hpp"
+#include "output_functions.hpp"
+#include "iterator_functions.hpp"
+
+typedef boost::tree_node::with_height<
+            boost::tree_node::with_position_gen<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::binary_node_gen
+                >
+            >
+          , double
+        >
+        DNode;
+
+#if !defined BOOST_NO_SFINAE
+typedef boost::tree_node::with_accumulation<
+            boost::tree_node::with_height_gen<
+                boost::tree_node::with_accumulation_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::with_accumulation_gen<
+                            boost::tree_node::with_count_gen<
+                                boost::tree_node::with_accumulation_gen<
+                                    boost::tree_node::binary_node_gen
+                                >
+                            >
+                          , AccuAccuKey
+                        >
+                    >
+                  , AccuCountKey
+                >
+            >
+          , double
+          , void
+          , AccuHeightKey
+        >
+        ANode;
+#endif  // BOOST_NO_SFINAE
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+typedef boost::tree_node::with_accumulation<
+            boost::tree_node::binary_node_gen
+          , DataMap
+          , void
+          , AccuYourUintKey
+        >
+        FNode;
+
+void out_with_it(FNode const& f_node)
+{
+    iterator_out_bf_pre_post(f_node, output_uint_char_node(), 5);
+    iterator_out_in_order(f_node, output_uint_char_node(), 5);
+    iterator_out_df(f_node, output_uint_char_tree(2, 7, true));
+}
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+template <typename Node>
+void initialize(Node& root)
+{
+    for (boost::tree_node::breadth_first_iterator<Node> itr(root); itr; ++itr)
+    {
+        BOOST_AUTO_TPL(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            itr->emplace_left(data - 2);
+            itr->emplace_right(data - 1);
+        }
+    }
+}
+
+#if defined BOOST_NO_SFINAE
+void out_with_it(DNode const& d_node)
+{
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_in_order(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+}
+#else  // !defined BOOST_NO_SFINAE
+void out_with_them(DNode const& d_node, ANode const& a_node)
+{
+    std::cout << std::endl << "#if defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_in_order(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+    std::cout << "#else  // !defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(a_node, output_node<boost::mpl::true_>(), 2);
+    iterator_out_in_order(a_node, output_node<boost::mpl::true_>(), 2);
+    iterator_out_df(a_node, output_tree<boost::mpl::true_>(4, 7, false));
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+}
+#endif  // BOOST_NO_SFINAE
+
+int main()
+{
+    DNode d_root(5.0);
+
+    initialize(d_root);
+
+#if !defined BOOST_NO_SFINAE
+    ANode a_root(5.0);
+
+    initialize(a_root);
+#endif
+
+    output_copyright_and_config_preamble();
+    output_header_and_type_preamble();
+    std::cout << "#include <boost/tree_node/typeof/binary_node.hpp>";
+    std::cout << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << std::endl << "#if defined BOOST_NO_SFINAE";
+#endif
+    std::cout << std::endl << (
+        "typedef boost::tree_node::with_height<"
+    ) << std::endl << (
+        "            boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                boost::tree_node::with_count_gen<"
+    ) << std::endl << (
+        "                    boost::tree_node::binary_node_gen"
+    ) << std::endl << "                >" << std::endl;
+    std::cout << "            >" << std::endl;
+    std::cout << "          , double" << std::endl;
+    std::cout << "        >" << std::endl;
+    std::cout << "        ANode;" << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << "#else  // !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "typedef boost::tree_node::with_accumulation<" << std::endl;
+    std::cout << "            boost::tree_node::with_height_gen<" << std::endl;
+    std::cout << "                boost::tree_node::with_accumulation_gen<";
+    std::cout << std::endl << (
+        "                    boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                        boost::tree_node::with_accumulation_gen<"
+    ) << std::endl << (
+        "                            boost::tree_node::with_count_gen<"
+    ) << std::endl << "                                ";
+    std::cout << "boost::tree_node::with_accumulation_gen<" << std::endl << (
+        "                                    boost::tree_node::binary_node_gen"
+    ) << std::endl << "                                >" << std::endl;
+    std::cout << "                            >" << std::endl;
+    std::cout << "                          , AccuAccuKey" << std::endl;
+    std::cout << "                        >" << std::endl;
+    std::cout << "                    >" << std::endl;
+    std::cout << "                  , AccuCountKey" << std::endl;
+    std::cout << "                >" << std::endl;
+    std::cout << "            >" << std::endl;
+    std::cout << "          , double" << std::endl;
+    std::cout << "          , void" << std::endl;
+    std::cout << "          , AccuHeightKey" << std::endl;
+    std::cout << "        >" << std::endl;
+    std::cout << "        ANode;" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+#endif  // BOOST_NO_SFINAE
+    std::cout << std::endl << "typedef boost::container_gen<" << std::endl;
+    std::cout << "            boost::dequeS" << std::endl;
+    std::cout << "          , boost::tuples::tuple<" << std::endl;
+    std::cout << "                BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::data_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::height_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::count_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<"
+    ) << std::endl << (
+        "                        boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                    >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "            >" << std::endl << "        >::type";
+    std::cout << std::endl << "        Values;" << std::endl;
+    std::cout << "typedef boost::container_gen<" << std::endl;
+    std::cout << "            boost::dequeS" << std::endl;
+    std::cout << "          , boost::tuples::tuple<" << std::endl;
+    std::cout << "                boost::tree_node::traversal_state";
+    std::cout << std::endl << "              , BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::data_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::height_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl;
+    std::cout << "                    get(" << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                      , boost::tree_node::count_key()";
+    std::cout << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<"
+    ) << std::endl << (
+        "                        boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                    >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "              , BOOST_TYPEOF(" << std::endl << (
+        "                    boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                        boost::get_reference<ANode const>()"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "            >" << std::endl << "        >::type";
+    std::cout << std::endl << "        DFValues;" << std::endl;
+    std::cout << std::endl << "int test_main(int argc, char** argv)";
+    std::cout << std::endl << '{' << std::endl << "    ANode a_root(5.0);";
+    std::cout << std::endl << std::endl << "    BOOST_CHECK(" << std::endl;
+    std::cout << "        !a_root.get_parent_ptr()" << std::endl;
+    std::cout << "//      , \"Parent member uninitialized.\"" << std::endl;
+    std::cout << "    );" << std::endl << std::endl;
+    std::cout << "    for (" << std::endl << (
+        "        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);"
+    ) << std::endl << "        itr;" << std::endl << "        ++itr";
+    std::cout << std::endl << "    )" << std::endl << "    {" << std::endl;
+    std::cout << "        BOOST_AUTO(data, get(*itr, ";
+    std::cout << "boost::tree_node::data_key()));" << std::endl << std::endl;
+    std::cout << "        if (1 < data)" << std::endl << "        {";
+    std::cout << std::endl << (
+        "            ANode::iterator child_itr(itr->emplace_left(data - 2));"
+    ) << std::endl;
+    std::cout << "            ANode::const_pointer const_child(&*child_itr);";
+    std::cout << std::endl << std::endl << "            BOOST_CHECK(";
+    std::cout << std::endl << (
+        "                child_itr->get_parent_ptr() == &*itr"
+    ) << std::endl << (
+        "//              , \"Ctor not linking child to parent.\""
+    ) << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl << (
+        "                itr->get_left_child_ptr() == &*child_itr"
+    ) << std::endl << (
+        "//              , \"Ctor not linking parent to child.\""
+    ) << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl << "                ";
+    std::cout << (
+        "child_itr->get_parent_ptr() == const_child->get_parent_ptr()"
+    ) << std::endl << (
+        "//              , \"Why are these pointers different?\""
+    ) << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl;
+    std::cout << "                get(" << std::endl;
+    std::cout << "                    *child_itr" << std::endl;
+    std::cout << "                  , boost::tree_node::position_key()";
+    std::cout << std::endl << "                ) == child_itr" << std::endl;
+    std::cout << "//              , \"Position iterator incorrect.\"";
+    std::cout << std::endl << "            );" << std::endl << std::endl;
+    std::cout << "            child_itr = itr->emplace_right(data - 1);";
+    std::cout << std::endl << "            const_child = &*child_itr;";
+    std::cout << std::endl << std::endl << "            BOOST_CHECK(";
+    std::cout << std::endl << (
+        "                child_itr->get_parent_ptr() == &*itr"
+    ) << std::endl;
+    std::cout << "//              , \"Ctor not linking child to parent.\"";
+    std::cout << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl << (
+        "                itr->get_right_child_ptr() == &*child_itr"
+    ) << std::endl << (
+        "//              , \"Ctor not linking parent to child.\""
+    ) << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl << "                ";
+    std::cout << (
+        "child_itr->get_parent_ptr() == const_child->get_parent_ptr()"
+    ) << std::endl << (
+        "//              , \"Why are these pointers different?\""
+    ) << std::endl << "            );" << std::endl;
+    std::cout << "            BOOST_CHECK(" << std::endl;
+    std::cout << "                get(" << std::endl;
+    std::cout << "                    *child_itr" << std::endl;
+    std::cout << "                  , boost::tree_node::position_key()";
+    std::cout << std::endl << "                ) == child_itr" << std::endl;
+    std::cout << "//              , \"Position iterator incorrect.\"";
+    std::cout << std::endl << "            );" << std::endl << "        }";
+    std::cout << std::endl << "    }" << std::endl << std::endl;
+    std::cout << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl;
+    std::cout << "    }" << std::endl << std::endl;
+
+    {
+        DNode::pointer d_p = d_root.get_left_child_ptr()->get_left_child_ptr();
+        DNode::iterator d_child_itr = d_p->insert_left(d_root);
+#if !defined BOOST_NO_SFINAE
+        ANode::pointer a_p = a_root.get_left_child_ptr()->get_left_child_ptr();
+        ANode::iterator a_child_itr = a_p->insert_left(a_root);
+#endif
+
+        std::cout << "    {" << std::endl << "        ANode a_copy(a_root);";
+        std::cout << std::endl << (
+            "        boost::tree_node::breadth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            bf_root_itr(a_root), bf_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::breadth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::pre_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            pre_root_itr(a_root), pre_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::pre_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::post_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            post_root_itr(a_root), post_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::post_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            post_d_root_itr(a_root), post_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::in_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            in_root_itr(a_root), in_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::depth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            df_root_itr(a_root), df_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::depth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            df_d_root_itr(a_root), df_d_copy_itr(a_copy);"
+        ) << std::endl << std::endl << (
+            "        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(bf_d_root_itr, bf_d_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(pre_root_itr, pre_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(pre_d_root_itr, pre_d_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(post_root_itr, post_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(post_d_root_itr, post_d_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(in_root_itr, in_copy_itr));"
+        ) << std::endl << (
+            "        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(df_d_root_itr, df_d_copy_itr));"
+        ) << std::endl << "    }" << std::endl << std::endl << "    {";
+        std::cout << std::endl << "        ANode::pointer p = ";
+        std::cout << "a_root.get_left_child_ptr()->get_left_child_ptr();";
+        std::cout << std::endl << (
+            "        ANode::iterator a_child_itr = p->insert_left(a_root);"
+        ) << std::endl << (
+            "        Values bf_vals, pre_vals, post_vals, in_vals;"
+        ) << std::endl << "        DFValues df_vals;" << std::endl << (
+            "        DFEmplacer emplacer;"
+        ) << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+        std::cout << " in_vals, df_vals);" << std::endl << std::endl;
+
+        d_root = *d_child_itr;
+#if !defined BOOST_NO_SFINAE
+        a_root = *a_child_itr;
+#endif
+        std::cout << "        a_root = *a_child_itr;" << std::endl;
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        in_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+        std::cout << " in_vals, df_vals);" << std::endl << std::endl;
+
+        *(d_p = d_root.get_right_child_ptr()) = d_root;
+#if !defined BOOST_NO_SFINAE
+        *(a_p = a_root.get_right_child_ptr()) = a_root;
+#endif
+        std::cout << "        *(p = a_root.get_right_child_ptr()) = a_root;";
+        std::cout << std::endl << "        test_node(*p, bf_vals, pre_vals, ";
+        std::cout << "post_vals, in_vals, df_vals);" << std::endl << std::endl;
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        in_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+        std::cout << " in_vals, df_vals);" << std::endl;
+        std::cout << "    }" << std::endl << std::endl;
+    }
+
+    d_root.get_right_child_ptr()->rotate_left();
+#if !defined BOOST_NO_SFINAE
+    a_root.get_right_child_ptr()->rotate_left();
+#endif
+    std::cout << "    a_root.get_right_child_ptr()->rotate_left();";
+    std::cout << std::endl << std::endl << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl;
+    std::cout << "    }" << std::endl << std::endl;
+
+    {
+        DNode::pointer d_p(d_root.get_right_child_ptr()->get_right_child_ptr());
+        DNode::iterator d_child_itr(d_p->emplace_right());
+
+        put(*d_child_itr, boost::tree_node::data_key(), 7);
+
+#if !defined BOOST_NO_SFINAE
+        ANode::pointer a_p(a_root.get_right_child_ptr()->get_right_child_ptr());
+        ANode::iterator a_child_itr(a_p->emplace_right());
+
+        put(*a_child_itr, boost::tree_node::data_key(), 7);
+#endif
+        std::cout << "    {" << std::endl << "        ANode::pointer ";
+        std::cout << "p(a_root.get_right_child_ptr()->get_right_child_ptr());";
+        std::cout << std::endl << (
+            "        ANode::iterator p_child_itr(p->emplace_right());"
+        ) << std::endl << (
+            "        Values bf_vals, pre_vals, post_vals, in_vals;"
+        ) << std::endl << "        DFValues df_vals;" << std::endl;
+        std::cout << "        DFEmplacer emplacer;" << std::endl << std::endl;
+        std::cout << (
+            "        put(*p_child_itr, boost::tree_node::data_key(), 7);"
+        );
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+        std::cout << " in_vals, df_vals);" << std::endl;
+        std::cout << "    }" << std::endl << std::endl;
+    }
+
+    d_root.get_left_child_ptr()->rotate_right();
+#if !defined BOOST_NO_SFINAE
+    a_root.get_left_child_ptr()->rotate_right();
+#endif
+    std::cout << "    a_root.get_left_child_ptr()->rotate_right();";
+    std::cout << std::endl << std::endl << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl;
+    std::cout << "    }" << std::endl << std::endl;
+
+    d_root.get_left_child_ptr()->rotate_left();
+#if !defined BOOST_NO_SFINAE
+    a_root.get_left_child_ptr()->rotate_left();
+#endif
+    std::cout << "    a_root.get_left_child_ptr()->rotate_left();";
+    std::cout << std::endl << std::endl << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl;
+    std::cout << "    }" << std::endl << std::endl;
+
+    d_root.begin()->clear();
+#if !defined BOOST_NO_SFINAE
+    a_root.begin()->clear();
+#endif
+    std::cout << "    a_root.begin()->clear();" << std::endl << std::endl;
+    std::cout << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl << "    }" << std::endl;
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO(data, boost::tree_node::get<example_keys::your_uint>(*itr));
+
+        if (1 < data)
+        {
+            --data;
+            itr->emplace_right(
+                boost::fusion::make_pair<example_keys::your_uint>(data)
+              , boost::fusion::make_pair<example_keys::your_char>('0' + data)
+            );
+            --data;
+            itr->emplace_left(
+                boost::fusion::make_pair<example_keys::your_uint>(data)
+              , boost::fusion::make_pair<example_keys::your_char>('0' + data)
+            );
+        }
+    }
+
+    std::cout << std::endl << "#if defined BOOST_TREE_NODE_CAN_USE_FUSION";
+    std::cout << std::endl << (
+        "    typedef boost::tree_node::with_accumulation<"
+    ) << std::endl << "                boost::tree_node::binary_node_gen";
+    std::cout << std::endl << "              , DataMap" << std::endl;
+    std::cout << "              , void" << std::endl;
+    std::cout << "              , AccuYourUintKey" << std::endl;
+    std::cout << "            >" << std::endl << "            FNode;";
+    std::cout << std::endl << "    typedef boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    BOOST_TYPEOF(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_uint"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            MoreValues;" << std::endl;
+    std::cout << "    typedef boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    boost::tree_node::traversal_state";
+    std::cout << std::endl << "                  , BOOST_TYPEOF(";
+    std::cout << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_uint"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            DFMoreValues;" << std::endl << std::endl;
+    std::cout << "    FNode f_root(" << std::endl << (
+        "        boost::fusion::make_pair<example_keys::your_uint>(5)"
+    ) << std::endl << (
+        "      , boost::fusion::make_pair<example_keys::your_char>(\'5\')"
+    ) << std::endl << "    );" << std::endl << std::endl;
+    std::cout << "    for (" << std::endl << (
+        "        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);"
+    ) << std::endl << "        itr;" << std::endl << "        ++itr";
+    std::cout << std::endl << "    )" << std::endl << "    {" << std::endl;
+    std::cout << "        BOOST_AUTO(data, boost::tree_node::get<example_";
+    std::cout << "keys::your_uint>(*itr));" << std::endl << std::endl;
+    std::cout << "        if (1 < data)" << std::endl << "        {";
+    std::cout << std::endl << "            --data;" << std::endl;
+    std::cout << "            itr->emplace_right(" << std::endl << "    " << (
+        "            boost::fusion::make_pair<example_keys::your_uint>(data)"
+    ) << std::endl << "              , boost::fusion::make_pair<example_keys";
+    std::cout << "::your_char>(\'0\' + data)" << std::endl << "            );";
+    std::cout << std::endl << "            --data;" << std::endl;
+    std::cout << "            itr->emplace_left(" << std::endl << "    " << (
+        "            boost::fusion::make_pair<example_keys::your_uint>(data)"
+    ) << std::endl << "              , boost::fusion::make_pair<example_keys";
+    std::cout << "::your_char>(\'0\' + data)" << std::endl << "            );";
+    std::cout << std::endl << "        }" << std::endl << "    }" << std::endl;
+    std::cout << std::endl << "    {" << std::endl;
+    std::cout << "        MoreValues bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFMoreValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+    out_with_it(f_root);
+    std::cout << "        test_f_node(f_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl;
+    std::cout << "    }" << std::endl << std::endl;
+
+    put(
+        *f_root.get_right_child_ptr()->get_left_child_ptr()
+      , example_keys::your_uint()
+      , 7
+    );
+    std::cout << "    put(";
+    std::cout << std::endl << (
+        "        *f_root.get_right_child_ptr()->get_left_child_ptr()"
+    ) << std::endl << "      , example_keys::your_uint()" << std::endl;
+    std::cout << "      , 7" << std::endl << "    );" << std::endl;
+    std::cout << std::endl << "    {" << std::endl;
+    std::cout << "        MoreValues bf_vals, pre_vals, post_vals, in_vals;";
+    std::cout << std::endl << "        DFMoreValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+    out_with_it(f_root);
+    std::cout << "        test_f_node(f_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " in_vals, df_vals);" << std::endl << "    }" << std::endl;
+    std::cout << "#endif  // BOOST_TREE_NODE_CAN_USE_FUSION" << std::endl;
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    std::cout << std::endl << "    return 0;" << std::endl << '}' << std::endl;
+    std::cout << std::endl << "#if defined BOOST_MSVC" << std::endl;
+    std::cout << "   #pragma warning (pop)" << std::endl;
+    std::cout << "#endif" << std::endl << std::endl;
+
+    return 0;
+}
+
Deleted: sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.cpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,38 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include "default_unconstruct_type.hpp"
-
-//[example__default_unconstructible_type__definitions
-default_unconstructible_example_type::default_unconstructible_example_type(
-    std::size_t n
-) : number(n)
-{
-}
-
-bool default_unconstructible_example_type::operator==(std::size_t n) const
-{
-    return number == n;
-}
-
-bool
-    operator==(
-        default_unconstructible_example_type const& lhs
-      , default_unconstructible_example_type const& rhs
-    )
-{
-    return lhs.number == rhs.number;
-}
-
-bool
-    operator<(
-        default_unconstructible_example_type const& lhs
-      , default_unconstructible_example_type const& rhs
-    )
-{
-    return lhs.number < rhs.number;
-}
-//]
-
Deleted: sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.hpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,44 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef LIBS_TREE_NODE_EXAMPLE_DEFAULT_UNCONSTRUCT_TYPE_HPP_INCLUDED
-#define LIBS_TREE_NODE_EXAMPLE_DEFAULT_UNCONSTRUCT_TYPE_HPP_INCLUDED
-
-#include <cstddef>
-#include <boost/config.hpp>
-
-//[example__default_unconstructible_type
-struct default_unconstructible_example_type
-{
-    std::size_t number;
-    explicit default_unconstructible_example_type(std::size_t n);
-    bool operator==(std::size_t n) const;
-};
-//]
-
-//[example__default_unconstructible_type__operator_equal
-bool
-    operator==(
-        default_unconstructible_example_type const& lhs
-      , default_unconstructible_example_type const& rhs
-    );
-//]
-
-//[example__default_unconstructible_type__operator_less
-bool
-    operator<(
-        default_unconstructible_example_type const& lhs
-      , default_unconstructible_example_type const& rhs
-    );
-//]
-
-#if defined BOOST_TYPEOF_COMPLIANT
-#include <boost/typeof/typeof.hpp>
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-BOOST_TYPEOF_REGISTER_TYPE(default_unconstructible_example_type)
-#endif
-
-#endif  // LIBS_TREE_NODE_EXAMPLE_DEFAULT_UNCONSTRUCT_TYPE_HPP_INCLUDED
-
Added: sandbox/tree_node/libs/tree_node/example/iterator_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/iterator_functions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,79 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_ITERATOR_FUNCTIONS_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
+#include <iostream>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/pre_order_iterator.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+#include <boost/tree_node/post_order_desc_iterator.hpp>
+#include <boost/tree_node/depth_first_iterator.hpp>
+#include <boost/tree_node/depth_first_desc_iterator.hpp>
+#include <boost/tree_node/in_order_iterator.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+
+template <typename NodeIterator, typename Function>
+void iterator_out(NodeIterator itr, Function f, unsigned int n)
+{
+    for (unsigned int i = 0; itr; ++itr)
+    {
+        if (!i)
+        {
+            std::cout << std::endl << "            ";
+        }
+
+        f(*itr);
+
+        if (++i == n)
+        {
+            i = 0;
+        }
+    }
+}
+
+template <typename Node, typename Function>
+void iterator_out_bf_pre_post(Node const& node, Function f, unsigned int n)
+{
+    std::cout << std::endl << "        emplacer[bf_vals]";
+    iterator_out(boost::tree_node::make_breadth_first_iterator(node), f, n);
+    std::cout << ';' << std::endl << "        emplacer[pre_vals]";
+    iterator_out(boost::tree_node::make_pre_order_iterator(node), f, n);
+    std::cout << ';' << std::endl << "        emplacer[post_vals]";
+    iterator_out(boost::tree_node::make_post_order_iterator(node), f, n);
+}
+
+template <typename Node, typename Function>
+void iterator_out_in_order(Node const& node, Function f, unsigned int n)
+{
+    std::cout << ';' << std::endl << "        emplacer[in_vals]";
+    iterator_out(boost::tree_node::in_order_iterator<Node const>(node), f, n);
+}
+
+template <typename Node, typename Function>
+void iterator_out_df(Node const& node, Function f)
+{
+    std::cout << ';' << std::endl << "        emplacer[df_vals]";
+
+    for (
+        boost::tree_node::depth_first_iterator<Node const> itr(node);
+        itr;
+        ++itr
+    )
+    {
+        f(
+            boost::tree_node::dereference_iterator(itr)
+          , boost::tree_node::traversal_state(itr)
+        );
+    }
+
+    std::cout << ';' << std::endl;
+}
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/match_predicate.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/match_predicate.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,95 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_MATCH_PREDICATE_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_MATCH_PREDICATE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/get_iterator_second.hpp>
+#include <boost/utility/get_iterator_value_second.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+template <typename Node, typename Selector>
+class example_match_predicate
+{
+    typename Node::iterator _itr;
+
+ public:
+    explicit example_match_predicate(typename Node::iterator itr);
+
+    template <typename P>
+    bool operator()(P const& p) const;
+
+ private:
+    template <typename P>
+    bool _evaluate(P const& p, boost::mpl::true_) const;
+
+    template <typename P>
+    bool _evaluate(P const& p, boost::mpl::false_) const;
+};
+
+template <typename Node, typename Selector>
+example_match_predicate<Node,Selector>::example_match_predicate(
+    typename Node::iterator itr
+) : _itr(itr)
+{
+}
+
+template <typename Node, typename Selector>
+template <typename P>
+inline bool
+    example_match_predicate<Node,Selector>::operator()(P const& p) const
+{
+    return _evaluate(p, boost::is_ptr_selector<Selector>());
+}
+
+template <typename Node, typename Selector>
+template <typename P>
+inline bool
+    example_match_predicate<Node,Selector>::_evaluate(
+        P const& p
+      , boost::mpl::true_
+    ) const
+{
+#if defined BOOST_NO_SFINAE
+    return get(
+        boost::get_iterator_value_second(p)
+      , boost::tree_node::data_key()
+    ) == get(
+        boost::get_iterator_second(_itr)
+      , boost::tree_node::data_key()
+    );
+#else
+    return boost::tree_node::get<boost::tree_node::data_key>(
+        boost::get_iterator_value_second(p)
+    ) == boost::tree_node::get<boost::tree_node::data_key>(
+        boost::get_iterator_second(_itr)
+    );
+#endif
+}
+
+template <typename Node, typename Selector>
+template <typename P>
+inline bool
+    example_match_predicate<Node,Selector>::_evaluate(
+        P const& p
+      , boost::mpl::false_
+    ) const
+{
+#if defined BOOST_NO_SFINAE
+    return get(p.second, boost::tree_node::data_key()) == get(
+        _itr->second
+      , boost::tree_node::data_key()
+    );
+#else
+    return boost::tree_node::get<boost::tree_node::data_key>(
+        p.second
+    ) == boost::tree_node::get<boost::tree_node::data_key>(_itr->second);
+#endif
+}
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_MATCH_PREDICATE_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/nary_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/nary_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,588 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <iterator>
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/nary_node.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "type_definitions.hpp"
+#include "output_preamble.hpp"
+#include "output_functions.hpp"
+#include "iterator_functions.hpp"
+
+template <typename Selector, typename Node>
+void initialize(Node& root)
+{
+    for (boost::tree_node::breadth_first_iterator<Node> itr(root); itr; ++itr)
+    {
+        BOOST_AUTO_TPL(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            for (std::size_t i = 0; i < data; ++i)
+            {
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+                if (std::tr1::is_same<Selector,boost::slistS>::value)
+                    (*itr).emplace(data - 1 - i);
+                else
+#endif
+                (*itr).emplace(i);
+            }
+        }
+    }
+}
+
+#if defined BOOST_NO_SFINAE
+template <typename DNode>
+void out_with_it(DNode const& d_node)
+{
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+}
+#else  // !defined BOOST_NO_SFINAE
+template <typename DNode, typename ANode>
+void out_with_them(DNode const& d_node, ANode const& a_node)
+{
+    std::cout << std::endl << "#if defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(d_node, output_node<boost::mpl::false_>(), 7);
+    iterator_out_df(d_node, output_tree<boost::mpl::false_>(2, 7, true));
+    std::cout << "#else  // !defined BOOST_NO_SFINAE";
+    iterator_out_bf_pre_post(a_node, output_node<boost::mpl::true_>(), 2);
+    iterator_out_df(a_node, output_tree<boost::mpl::true_>(4, 7, false));
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+}
+#endif  // BOOST_NO_SFINAE
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+template <typename FNode>
+void out_with_all(FNode const& f_node)
+{
+    iterator_out_bf_pre_post(f_node, output_uint_char_node(), 5);
+    iterator_out_df(f_node, output_uint_char_tree(2, 7, true));
+}
+#endif
+
+template <typename Selector>
+void example()
+{
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::with_count_gen<
+                        boost::tree_node::nary_node_gen<Selector>
+                    >
+                >
+              , double
+            >
+            DNode;
+
+    DNode d_root(5.0);
+
+    initialize<Selector>(d_root);
+
+#if !defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::with_height_gen<
+                    boost::tree_node::with_accumulation_gen<
+                        boost::tree_node::with_position_gen<
+                            boost::tree_node::with_accumulation_gen<
+                                boost::tree_node::with_count_gen<
+                                    boost::tree_node::with_accumulation_gen<
+                                        boost::tree_node::nary_node_gen<
+                                            Selector
+                                        >
+                                    >
+                                >
+                              , AccuAccuKey
+                            >
+                        >
+                      , AccuCountKey
+                    >
+                >
+              , double
+              , void
+              , AccuHeightKey
+            >
+            ANode;
+
+    ANode a_root(5.0);
+
+    initialize<Selector>(a_root);
+#endif  // BOOST_NO_SFINAE
+
+    output_copyright_and_config_preamble();
+    std::cout << std::endl << "#include <iterator>";
+    output_header_and_type_preamble();
+    std::cout << "#include <boost/tree_node/typeof/nary_node.hpp>";
+    std::cout << std::endl << std::endl << "template <typename Selector>";
+    std::cout << std::endl << "void test()" << std::endl << '{' << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << "#if defined BOOST_NO_SFINAE" << std::endl;
+#endif
+    std::cout << "    typedef boost::tree_node::with_height<" << std::endl << (
+        "                boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                    boost::tree_node::with_count_gen<"
+    ) << std::endl << (
+        "                        boost::tree_node::nary_node_gen<Selector>"
+    ) << std::endl << "                    >" << std::endl;
+    std::cout << "                >" << std::endl;
+    std::cout << "              , double" << std::endl;
+    std::cout << "            >" << std::endl;
+    std::cout << "            ANode;" << std::endl;
+#if !defined BOOST_NO_SFINAE
+    std::cout << "#else" << std::endl << (
+        "    typedef boost::tree_node::with_accumulation<"
+    ) << std::endl << "                boost::tree_node::with_height_gen<";
+    std::cout << std::endl << (
+        "                    boost::tree_node::with_accumulation_gen<"
+    ) << std::endl << (
+        "                        boost::tree_node::with_position_gen<"
+    ) << std::endl << (
+        "                            boost::tree_node::with_accumulation_gen<"
+    ) << std::endl << (
+        "                                boost::tree_node::with_count_gen<"
+    ) << std::endl << "                                    ";
+    std::cout << "boost::tree_node::with_accumulation_gen<" << std::endl << (
+        "                                        "
+    ) << "boost::tree_node::nary_node_gen<" << std::endl;
+    std::cout << "                                            Selector";
+    std::cout << std::endl << "                                        >";
+    std::cout << std::endl << "                                    >";
+    std::cout << std::endl << "                                >";
+    std::cout << std::endl << "                              , AccuAccuKey";
+    std::cout << std::endl << "                            >" << std::endl;
+    std::cout << "                        >" << std::endl;
+    std::cout << "                      , AccuCountKey" << std::endl;
+    std::cout << "                    >" << std::endl;
+    std::cout << "                >" << std::endl;
+    std::cout << "              , double" << std::endl;
+    std::cout << "              , void" << std::endl;
+    std::cout << "              , AccuHeightKey" << std::endl;
+    std::cout << "            >" << std::endl;
+    std::cout << "            ANode;" << std::endl << "#endif" << std::endl;
+#endif  // BOOST_NO_SFINAE
+    output_container_type_preamble();
+    std::cout << std::endl << "    ANode a_root(5.0);" << std::endl;
+    std::cout << std::endl << "    BOOST_CHECK(" << std::endl;
+    std::cout << "        !a_root.get_parent_ptr()" << std::endl;
+    std::cout << "//      , \"Parent member uninitialized.\"" << std::endl;
+    std::cout << "    );" << std::endl << std::endl;
+    std::cout << "    for (" << std::endl << (
+        "        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);"
+    ) << std::endl << "        itr;" << std::endl << "        ++itr";
+    std::cout << std::endl << "    )" << std::endl << "    {" << std::endl << (
+        "        BOOST_AUTO(data, get(*itr, boost::tree_node::data_key"
+    ) << "()));" << std::endl << std::endl << "        if (1 < data)";
+    std::cout << std::endl << "        {" << std::endl;
+    std::cout << "            for (std::size_t i = 0; i < data; ++i)";
+    std::cout << std::endl << "            {" << std::endl << (
+        "                typename ANode::iterator child_itr("
+    ) << std::endl << (
+        "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"
+    ) << std::endl << (
+        "                    (std::tr1::is_same<Selector,boost::slistS>::value"
+    ) << ") ? (" << std::endl;
+    std::cout << "                        (*itr).emplace(data - 1 - i)";
+    std::cout << std::endl << "                    ) :" << std::endl;
+    std::cout << "#endif" << std::endl;
+    std::cout << "                    (*itr).emplace(i)";
+    std::cout << std::endl << "                );" << std::endl << (
+        "                typename ANode::const_pointer const_child(&*child_itr"
+    ) << ");" << std::endl << "                BOOST_CHECK(" << std::endl;
+    std::cout << "                    (*child_itr).get_parent_ptr() == &*itr";
+    std::cout << std::endl << (
+        "//                  , \"Ctor not linking child to parent.\""
+    ) << std::endl << "                );" << std::endl;
+    std::cout << "                BOOST_CHECK(" << std::endl;
+    std::cout << "                    (" << std::endl << (
+        "                        (*child_itr).get_parent_ptr()"
+    ) << std::endl << (
+        "                    ) == (*const_child).get_parent_ptr()"
+    ) << std::endl;
+    std::cout << "//                  , \"Why are these pointers different?\"";
+    std::cout << std::endl << "                );" << std::endl << std::endl;
+    std::cout << "                {" << std::endl << (
+        "                    typename ANode::iterator c_itr = (*itr).begin();"
+    ) << std::endl << std::endl << (
+        "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"
+    ) << std::endl << "                    " << (
+        "if (!std::tr1::is_same<Selector,boost::slistS>::value)"
+    ) << std::endl << "#endif" << std::endl;
+    std::cout << "                    std::advance(c_itr, i);" << std::endl;
+    std::cout << "                    BOOST_CHECK(" << std::endl;
+    std::cout << "                        &*child_itr == &*c_itr" << std::endl;
+    std::cout << "//                      " << (
+        ", \"Ctor not linking parent to child.\""
+    ) << std::endl << "                    );" << std::endl;
+    std::cout << "                }" << std::endl << "            }";
+    std::cout << std::endl << "        }" << std::endl << "    }";
+    std::cout << std::endl << std::endl << "    {" << std::endl;
+    std::cout << "        Values bf_vals, pre_vals, post_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals, df_";
+    std::cout << "vals);" << std::endl << "    }" << std::endl << std::endl;
+
+    {
+        typename DNode::iterator d_child_itr(
+            (*(++d_root.begin())).insert(d_root)
+        );
+#if !defined BOOST_NO_SFINAE
+        typename ANode::iterator a_child_itr(
+            (*(++a_root.begin())).insert(a_root)
+        );
+#endif
+
+        std::cout << "    {" << std::endl << "        ANode a_copy(a_root);";
+        std::cout << std::endl << (
+            "        boost::tree_node::breadth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            bf_root_itr(a_root), bf_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::breadth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::pre_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            pre_root_itr(a_root), pre_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::pre_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::post_order_iterator<ANode const>"
+        ) << std::endl << (
+            "            post_root_itr(a_root), post_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::post_order";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            post_d_root_itr(a_root), post_d_copy_itr(a_copy);"
+        ) << std::endl << (
+            "        boost::tree_node::depth_first_iterator<ANode const>"
+        ) << std::endl << (
+            "            df_root_itr(a_root), df_copy_itr(a_copy);"
+        ) << std::endl << "        boost::tree_node::depth_first";
+        std::cout << "_descendant_iterator<ANode const>" << std::endl << (
+            "            df_d_root_itr(a_root), df_d_copy_itr(a_copy);"
+        ) << std::endl << std::endl << (
+            "        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(bf_d_root_itr, bf_d_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(pre_root_itr, pre_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(pre_d_root_itr, pre_d_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(post_root_itr, post_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(post_d_root_itr, post_d_copy_itr));"
+        ) << std::endl << (
+            "        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));"
+        ) << std::endl << "        BOOST_CHECK(" << (
+            "test_node_copies(df_d_root_itr, df_d_copy_itr));"
+        ) << std::endl << "    }" << std::endl << std::endl << "    {";
+        std::cout << std::endl << (
+            "        typename ANode::iterator a_child_itr("
+        ) << std::endl << "            (*(++a_root.begin())).insert(a_root)";
+        std::cout << std::endl << "        );" << std::endl;
+        std::cout << "        Values bf_vals, pre_vals, post_vals;";
+        std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+        std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals";
+        std::cout << ", df_vals);" << std::endl << std::endl;
+
+        d_root = *d_child_itr;
+#if !defined BOOST_NO_SFINAE
+        a_root = *a_child_itr;
+#endif
+        std::cout << "        a_root = *a_child_itr;" << std::endl;
+        std::cout << "        bf_vals.clear();" << std::endl;
+        std::cout << "        pre_vals.clear();" << std::endl;
+        std::cout << "        post_vals.clear();" << std::endl;
+        std::cout << "        df_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+        out_with_it(d_root);
+#else
+        out_with_them(d_root, a_root);
+#endif
+        std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals";
+        std::cout << ", df_vals);" << std::endl << std::endl;
+
+        d_child_itr = d_root.begin();
+        std::advance(d_child_itr, 4);
+        *(*d_child_itr).begin() = d_root;
+#if !defined BOOST_NO_SFINAE
+        a_child_itr = a_root.begin();
+        std::advance(a_child_itr, 4);
+        *(*a_child_itr).begin() = a_root;
+#endif
+    }
+
+    std::cout << "        a_child_itr = a_root.begin();" << std::endl;
+    std::cout << "        std::advance(a_child_itr, 4);" << std::endl;
+    std::cout << "        a_child_itr = (*a_child_itr).begin();" << std::endl;
+    std::cout << "        *a_child_itr = a_root;" << std::endl;
+    std::cout << "        test_node(*a_child_itr, bf_vals, pre_vals,";
+    std::cout << " post_vals, df_vals);" << std::endl << std::endl;
+    std::cout << "        bf_vals.clear();" << std::endl;
+    std::cout << "        pre_vals.clear();" << std::endl;
+    std::cout << "        post_vals.clear();" << std::endl;
+    std::cout << "        df_vals.clear();" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals, df_";
+    std::cout << "vals);" << std::endl << "    }" << std::endl << std::endl;
+
+    {
+        typename DNode::iterator d_child_itr(d_root.begin());
+
+        std::advance(d_child_itr, 3);
+        (*d_child_itr).clear();
+    }
+
+#if !defined BOOST_NO_SFINAE
+    {
+        typename ANode::iterator a_child_itr(a_root.begin());
+
+        std::advance(a_child_itr, 3);
+        (*a_child_itr).clear();
+    }
+#endif
+
+    std::cout << "    {" << std::endl << (
+        "        typename ANode::iterator a_child_itr(a_root.begin());"
+    ) << std::endl << std::endl << "        std::advance(a_child_itr, 3);";
+    std::cout << std::endl << "        (*a_child_itr).clear();" << std::endl;
+    std::cout << std::endl << "        Values bf_vals, pre_vals, post_vals;";
+    std::cout << std::endl << "        DFValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+#if defined BOOST_NO_SFINAE
+    out_with_it(d_root);
+#else
+    out_with_them(d_root, a_root);
+#endif
+    std::cout << "        test_node(a_root, bf_vals, pre_vals, post_vals, df_";
+    std::cout << "vals);" << std::endl << "    }" << std::endl;
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::nary_node_gen<Selector>
+              , DataMap
+              , void
+              , AccuYourUintKey
+            >
+            FNode;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO_TPL(
+            data
+          , boost::tree_node::get<example_keys::your_uint>(*itr)
+        );
+
+        if (1 < data)
+        {
+            for (unsigned int i = 0; i < data; ++i)
+            {
+                if (std::tr1::is_same<Selector,boost::slistS>::value)
+                {
+                    (*itr).emplace(
+                        boost::fusion::make_pair<example_keys::your_uint>(
+                            data - 1 - i
+                        )
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + data - 1 - i
+                        )
+                    );
+                }
+                else
+                {
+                    (*itr).emplace(
+                        boost::fusion::make_pair<example_keys::your_uint>(i)
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + i
+                        )
+                    );
+                }
+            }
+        }
+    }
+
+    std::cout << std::endl << "#if defined BOOST_TREE_NODE_CAN_USE_FUSION";
+    std::cout << std::endl << (
+        "    typedef boost::tree_node::with_accumulation<"
+    ) << std::endl << (
+        "                boost::tree_node::nary_node_gen<Selector>"
+    ) << std::endl << "              , DataMap" << std::endl;
+    std::cout << "              , void" << std::endl;
+    std::cout << "              , AccuYourUintKey" << std::endl;
+    std::cout << "            >" << std::endl << "            FNode;";
+    output_container_fused_type_preamble();
+    std::cout << std::endl << "    FNode f_root(" << std::endl << (
+        "        boost::fusion::make_pair<example_keys::your_uint>(5)"
+    ) << std::endl << (
+        "      , boost::fusion::make_pair<example_keys::your_char>(\'5\')"
+    ) << std::endl << "    );" << std::endl << std::endl;
+    std::cout << "    for (" << std::endl << (
+        "        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);"
+    ) << std::endl << "        itr;" << std::endl << "        ++itr";
+    std::cout << std::endl << "    )" << std::endl << "    {" << std::endl;
+    std::cout << "        BOOST_AUTO_TPL(" << std::endl << "            data";
+    std::cout << std::endl << (
+        "          , boost::tree_node::get<example_keys::your_uint>(*itr)"
+    ) << std::endl << "        );" << std::endl << std::endl;
+    std::cout << "        if (1 < data)" << std::endl << "        {";
+    std::cout << std::endl << (
+        "            for (unsigned int i = 0; i < data; ++i)"
+    ) << std::endl << "            {" << std::endl << (
+        "                if (std::tr1::is_same<Selector,boost::slistS>::value)"
+    ) << std::endl << "                {" << std::endl;
+    std::cout << "                    (*itr).emplace(" << std::endl << (
+        "                        boost::fusion::make_pair<example_keys::your_"
+    ) << "uint>(" << std::endl << "                            data - 1 - i";
+    std::cout << std::endl << "                        )" << std::endl << (
+        "                      , boost::fusion::make_pair<example_keys::your_"
+    ) << "char>(" << std::endl << (
+        "                            \'0\' + data - 1 - i"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    );" << std::endl << "                }";
+    std::cout << std::endl << "                else" << std::endl;
+    std::cout << "                {" << std::endl;
+    std::cout << "                    (*itr).emplace(" << std::endl << (
+        "                        boost::fusion::make_pair<example_keys::your_"
+    ) << "uint>(i)" << std::endl << "                      , boost::" << (
+        "fusion::make_pair<example_keys::your_char>("
+    ) << std::endl << "                            \'0\' + i" << std::endl;
+    std::cout << "                        )" << std::endl;
+    std::cout << "                    );" << std::endl;
+    std::cout << "                }" << std::endl;
+    std::cout << "            }" << std::endl;
+    std::cout << std::endl << "        }" << std::endl << "    }" << std::endl;
+    std::cout << std::endl << "    {" << std::endl;
+    std::cout << "        MoreValues bf_vals, pre_vals, post_vals;";
+    std::cout << std::endl << "        DFMoreValues df_vals;" << std::endl;
+    std::cout << "        DFEmplacer emplacer;" << std::endl;
+    out_with_all(f_root);
+    std::cout << "        test_f_node(f_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " df_vals);" << std::endl << std::endl << (
+        "        typename FNode::iterator f_child_itr(f_root.begin());"
+    ) << std::endl << std::endl << "        std::advance(f_child_itr, 3);";
+    std::cout << std::endl << "        f_child_itr = (*f_child_itr).begin();";
+    std::cout << std::endl << "        std::advance(f_child_itr, 2);";
+    std::cout << std::endl << "        " << (
+        "boost::tree_node::put(*f_child_itr, example_keys::your_uint(), 7);"
+    ) << std::endl << "        bf_vals.clear();" << std::endl;
+    std::cout << "        pre_vals.clear();" << std::endl;
+    std::cout << "        post_vals.clear();" << std::endl;
+    std::cout << "        df_vals.clear();" << std::endl;
+
+    {
+        typename FNode::iterator f_child_itr(f_root.begin());
+
+        std::advance(f_child_itr, 3);
+        f_child_itr = (*f_child_itr).begin();
+        std::advance(f_child_itr, 2);
+        put(*f_child_itr, example_keys::your_uint(), 7);
+    }
+
+    out_with_all(f_root);
+    std::cout << "        test_f_node(f_root, bf_vals, pre_vals, post_vals,";
+    std::cout << " df_vals);" << std::endl << "    }" << std::endl;
+    std::cout << "#endif  // BOOST_TREE_NODE_CAN_USE_FUSION" << std::endl;
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    std::cout << '}' << std::endl << std::endl << "#if defined BOOST_MSVC";
+    std::cout << std::endl << "   #pragma warning (pop)" << std::endl;
+    std::cout << "#endif" << std::endl << std::endl;
+    std::cout << "#if defined BOOST_TYPEOF_EMULATION" << std::endl << (
+        "#include <boost/typeof/boost/ptr_container/ptr_vector.hpp>"
+    ) << std::endl << (
+        "#include <boost/typeof/boost/ptr_container/ptr_deque.hpp>"
+    ) << std::endl << (
+        "#include <boost/typeof/boost/ptr_container/ptr_list.hpp>"
+    ) << std::endl << "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION";
+    std::cout << std::endl << (
+        "#include <boost/typeof/boost/container/vector.hpp>"
+    ) << std::endl << (
+        "#include <boost/typeof/boost/container/stable_vector.hpp>"
+    ) << std::endl << "#include <boost/typeof/boost/container/deque.hpp>";
+    std::cout << std::endl << (
+        "#include <boost/typeof/boost/container/list.hpp>"
+    ) << std::endl << "#include <boost/typeof/boost/container/slist.hpp>";
+    std::cout << std::endl << (
+        "#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"
+    ) << std::endl << "#endif  // BOOST_TYPEOF_EMULATION" << std::endl;
+    std::cout << std::endl << "int test_main(int argc, char** argv)";
+    std::cout << std::endl << '{' << std::endl;
+    std::cout << "    test<boost::ptr_vecS>();" << std::endl;
+    std::cout << "    test<boost::ptr_dequeS>();" << std::endl;
+    std::cout << "    test<boost::ptr_listS>();" << std::endl << (
+        "#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"
+    ) << std::endl << (
+        "    test<boost::vector_selector<boost::mpl::true_> >();"
+    ) << std::endl << "    test<boost::stable_vecS>();" << std::endl;
+    std::cout << "    test<boost::deque_selector<boost::mpl::true_> >();";
+    std::cout << std::endl << (
+        "    test<boost::list_selector<boost::mpl::true_> >();"
+    ) << std::endl << "    test<boost::slistS>();" << std::endl;
+    std::cout << "#endif" << std::endl << std::endl;
+    std::cout << "    return 0;" << std::endl << '}' << std::endl << std::endl;
+}
+
+#if defined BOOST_TYPEOF_EMULATION
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/ptr_container/ptr_vector.hpp>
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/container/slist.hpp>
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif  // BOOST_TYPEOF_EMULATION
+
+int main()
+{
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    example<boost::ptr_vecS>();
+#else
+    example<boost::slistS>();
+#endif
+    return 0;
+}
+
Added: sandbox/tree_node/libs/tree_node/example/output_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/output_functions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,195 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_OUTPUT_FUNCTIONS_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_OUTPUT_FUNCTIONS_HPP_INCLUDED
+
+#include <iostream>
+#include <boost/mpl/bool.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/data_key.hpp>
+#include <boost/tree_node/count_key.hpp>
+#include <boost/tree_node/height_key.hpp>
+#include <boost/tree_node/position_key.hpp>
+#include <boost/tree_node/accumulation_key.hpp>
+#include "type_definitions.hpp"
+#include "output_tabs.hpp"
+
+template <typename Node>
+void output_data_height_and_count(Node const& node, bool b, boost::mpl::false_)
+{
+    std::cout << get(node, boost::tree_node::data_key());
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << get(node, boost::tree_node::height_key());
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << get(node, boost::tree_node::count_key());
+}
+
+template <typename Node>
+void output_data_height_and_count(Node const& node, bool b, boost::mpl::true_)
+{
+    std::cout << boost::tree_node::get<boost::tree_node::data_key>(node);
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<boost::tree_node::height_key>(node);
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<boost::tree_node::count_key>(node);
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+        node
+    );
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<AccuHeightKey>(node);
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<AccuCountKey>(node);
+    if (b) std::cout << ", "; else std::cout << ',';
+    std::cout << boost::tree_node::get<AccuAccuKey>(node);
+}
+
+template <typename Node>
+void output_uint_and_char(Node const& node, bool b)
+{
+    std::cout << boost::tree_node::get<example_keys::your_uint>(
+        node
+    ) << (b ? ", \'" : ",\'") << static_cast<char>(
+        boost::tree_node::get<example_keys::your_char>(node)
+    ) << (b ? "\', " : "\',") << boost::tree_node::get<AccuYourUintKey>(node);
+}
+
+template <typename IncludeAccumulations>
+struct output_node
+{
+    template <typename Node>
+    void operator()(Node const& node) const
+    {
+        std::cout << '(';
+        output_data_height_and_count(node, true, IncludeAccumulations());
+        std::cout << ')';
+    }
+
+    template <typename Key, typename Node>
+    void operator()(Key const& key, Node const& node) const
+    {
+        std::cout << "(\"" << key << "\", ";
+        output_data_height_and_count(node, true, IncludeAccumulations());
+        std::cout << ')';
+    }
+};
+
+struct output_uint_char_node
+{
+    template <typename Node>
+    void operator()(Node const& node) const
+    {
+        std::cout << '(';
+        output_uint_and_char(node, true);
+        std::cout << ')';
+    }
+
+    template <typename Key, typename Node>
+    void operator()(Key const& key, Node const& node) const
+    {
+        std::cout << "(\"" << key << "\", ";
+        output_uint_and_char(node, true);
+        std::cout << ')';
+    }
+};
+
+template <typename IncludeAccumulations>
+class output_tree
+{
+    unsigned int _ply_limit;
+    unsigned int _tab_limit;
+    bool _is_4_long;
+
+ public:
+    output_tree(unsigned int ply_limit, unsigned int tab_limit, bool is_4_long)
+      : _ply_limit(ply_limit), _tab_limit(tab_limit), _is_4_long(is_4_long)
+    {
+    }
+
+    template <typename Node>
+    void
+        operator()(
+            Node const& node
+          , boost::tree_node::traversal_state state
+        )
+    {
+        std::cout << std::endl;
+        output_tabs(state, _ply_limit, _tab_limit, _is_4_long);
+        output_data_height_and_count(node, true, IncludeAccumulations());
+        std::cout << ')';
+    }
+
+    template <typename Key, typename Node>
+    void
+        operator()(
+            Key const& key
+          , Node const& node
+          , boost::tree_node::traversal_state state
+        )
+    {
+        std::cout << std::endl;
+        output_tabs(state, _ply_limit, _tab_limit, _is_4_long);
+        std::cout << '\"' << key << "\",";
+        if (_is_4_long) std::cout << ' ';
+        output_data_height_and_count(node, _is_4_long, IncludeAccumulations());
+        std::cout << ')';
+    }
+};
+
+class output_uint_char_tree
+{
+    unsigned int _ply_limit;
+    unsigned int _tab_limit;
+    bool _is_4_long;
+
+ public:
+    output_uint_char_tree(
+        unsigned int ply_limit
+      , unsigned int tab_limit
+      , bool is_4_long
+    ) : _ply_limit(ply_limit), _tab_limit(tab_limit), _is_4_long(is_4_long)
+    {
+    }
+
+    template <typename Node>
+    void
+        operator()(
+            Node const& node
+          , boost::tree_node::traversal_state state
+        )
+    {
+        std::cout << std::endl;
+        output_tabs(state, _ply_limit, _tab_limit, _is_4_long);
+        output_uint_and_char(node, _is_4_long);
+        std::cout << ')';
+    }
+
+    template <typename Key, typename Node>
+    void
+        operator()(
+            Key const& key
+          , Node const& node
+          , boost::tree_node::traversal_state state
+        )
+    {
+        std::cout << std::endl;
+        output_tabs(state, _ply_limit, _tab_limit, _is_4_long);
+        std::cout << '\"' << key << "\",";
+        if (_is_4_long) std::cout << ' ';
+        output_uint_and_char(node, _is_4_long);
+        std::cout << ')';
+    }
+};
+
+#if defined BOOST_TYPEOF_COMPLIANT
+#include <boost/typeof/typeof.hpp>
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(output_node, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(output_tree, 1)
+#endif
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_OUTPUT_FUNCTIONS_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/output_preamble.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/output_preamble.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,219 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <boost/tree_node/preprocessor.hpp>
+#include "output_preamble.hpp"
+
+void output_copyright_and_config_preamble()
+{
+    std::cout << "// Copyright (C) 2012 Cromwell D. Enage" << std::endl << (
+        "// Distributed under the Boost Software License, Version 1.0."
+    ) << std::endl << "// (See accompanying file LICENSE_1_0.txt or copy at";
+    std::cout << std::endl << "// http://www.boost.org/LICENSE_1_0.txt)";
+    std::cout << std::endl << std::endl << "//#define BOOST_TYPEOF_COMPLIANT";
+    std::cout << std::endl << std::endl << "#include <boost/config.hpp>";
+    std::cout << std::endl << std::endl << "#if defined BOOST_MSVC";
+    std::cout << std::endl << "    #pragma warning (push)" << std::endl;
+    std::cout << "    #pragma warning (disable : 4996)  // fn called w/params";
+    std::cout << " that may be unsafe" << std::endl << "#endif" << std::endl;
+}
+
+void output_header_and_type_preamble()
+{
+    std::cout << std::endl << "#include <boost/typeof/typeof.hpp>";
+    std::cout << std::endl << "#include <boost/tuple/tuple.hpp>" << std::endl;
+    std::cout << "#include <boost/utility/get_reference.hpp>" << std::endl;
+    std::cout << "#include <boost/container_gen/selectors.hpp>" << std::endl;
+    std::cout << "#include <boost/container_gen/container_gen.hpp>";
+    std::cout << std::endl << (
+        "#include <boost/container_gen/emplace_function_gen.hpp>"
+    ) << std::endl << (
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+        "#include <boost/tree_node/preprocessor.hpp>"
+    ) << std::endl << (
+#endif
+        "#include <boost/tree_node/typeof/with_count.hpp>"
+    ) << std::endl << (
+        "#include <boost/tree_node/typeof/with_height.hpp>"
+    ) << std::endl << (
+        "#include <boost/tree_node/typeof/with_position.hpp>"
+    ) << std::endl << std::endl << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "#include <boost/tree_node/typeof/with_accumulation.hpp>";
+    std::cout << std::endl << "#endif" << std::endl << std::endl;
+    std::cout << "#include \"../example/type_definitions.hpp\"" << std::endl;
+    std::cout << "#include \"iterator_functions.hpp\"" << std::endl;
+    std::cout << std::endl << (
+        "typedef boost::emplace_function_gen<boost::dequeS>::type"
+    ) << std::endl << "        DFEmplacer;" << std::endl << std::endl;
+}
+
+void output_container_type_preamble()
+{
+    std::cout << std::endl << "    typedef typename boost::container_gen<";
+    std::cout << std::endl << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::data_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::height_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::count_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                        >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                >" << std::endl << "            >::type";
+    std::cout << std::endl << "            Values;" << std::endl;
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    boost::tree_node::traversal_state";
+    std::cout << std::endl << "                  , BOOST_TYPEOF_TPL(";
+    std::cout << std::endl << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::data_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl;
+    std::cout << "                          , boost::tree_node::height_key()";
+    std::cout << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl;
+    std::cout << "                        get(" << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << (
+        "                          , boost::tree_node::count_key()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#if !defined BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            boost::tree_node::accumulation_key<>"
+    ) << std::endl << (
+        "                        >(boost::get_reference<ANode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuHeightKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuCountKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuAccuKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<ANode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl;
+    std::cout << "#endif  // BOOST_NO_SFINAE" << std::endl;
+    std::cout << "                >" << std::endl << "            >::type";
+    std::cout << std::endl << "            DFValues;" << std::endl;
+}
+
+void output_container_fused_type_preamble()
+{
+    std::cout << std::endl << "    typedef typename boost::container_gen<";
+    std::cout << std::endl << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_uint"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            MoreValues;" << std::endl;
+    std::cout << "    typedef typename boost::container_gen<" << std::endl;
+    std::cout << "                boost::dequeS" << std::endl;
+    std::cout << "              , boost::tuples::tuple<" << std::endl;
+    std::cout << "                    boost::tree_node::traversal_state";
+    std::cout << std::endl << "                  , BOOST_TYPEOF_TPL(";
+    std::cout << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_uint"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<"
+    ) << std::endl << (
+        "                            example_keys::your_char"
+    ) << std::endl << (
+        "                        >(boost::get_reference<FNode const>())"
+    ) << std::endl << "                    )" << std::endl;
+    std::cout << "                  , BOOST_TYPEOF_TPL(" << std::endl << (
+        "                        boost::tree_node::get<AccuYourUintKey>("
+    ) << std::endl << (
+        "                            boost::get_reference<FNode const>()"
+    ) << std::endl << "                        )" << std::endl;
+    std::cout << "                    )" << std::endl << "                >";
+    std::cout << std::endl << "            >::type" << std::endl;
+    std::cout << "            DFMoreValues;" << std::endl;
+}
+
Added: sandbox/tree_node/libs/tree_node/example/output_preamble.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/output_preamble.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,15 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_OUTPUT_PREAMBLE_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_OUTPUT_PREAMBLE_HPP_INCLUDED
+
+void output_copyright_and_config_preamble();
+void output_header_and_type_preamble();
+void output_container_type_preamble();
+void output_container_fused_type_preamble();
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_OUTPUT_PREAMBLE_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/example/output_tabs.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/output_tabs.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,60 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <iostream>
+#include <algorithm>
+#include <boost/assert.hpp>
+#include "output_tabs.hpp"
+
+void
+    output_tabs(
+        boost::tree_node::traversal_state state
+      , unsigned int& ply_limit
+      , unsigned int tab_limit
+      , bool is_4_long
+    )
+{
+    switch (state)
+    {
+        case boost::tree_node::pre_order_traversal:
+        {
+            ++ply_limit;
+
+            for (
+                unsigned int ply = 0;
+                ply < (std::min)(ply_limit, tab_limit);
+                ++ply
+            )
+            {
+                std::cout << (is_4_long ? "    " : "  ");
+            }
+
+            std::cout << "(boost::tree_node::pre_order_traversal, ";
+            break;
+        }
+
+        case boost::tree_node::post_order_traversal:
+        {
+            for (
+                unsigned int ply = 0;
+                ply < (std::min)(ply_limit, tab_limit);
+                ++ply
+            )
+            {
+                std::cout << (is_4_long ? "    " : "  ");
+            }
+
+            std::cout << "(boost::tree_node::post_order_traversal, ";
+            --ply_limit;
+            break;
+        }
+
+        default:
+        {
+            BOOST_ASSERT(false);
+        }
+    }
+}
+
Added: sandbox/tree_node/libs/tree_node/example/output_tabs.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/output_tabs.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,20 @@
+// Copyright (C) 2011-2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_OUTPUT_TABS_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_OUTPUT_TABS_HPP_INCLUDED
+
+#include <boost/tree_node/traversal_state.hpp>
+
+void
+    output_tabs(
+        boost::tree_node::traversal_state state
+      , unsigned int& ply_limit
+      , unsigned int tab_limit
+      , bool is_4_long
+    );
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_OUTPUT_TABS_HPP_INCLUDED
+
Deleted: sandbox/tree_node/libs/tree_node/example/show_functions.cpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/show_functions.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,69 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/assert.hpp>
-#include "show_functions.hpp"
-
-//[example__show_tabs
-void
-    show_tabs(
-        boost::tree_node::traversal_state state
-      , unsigned int& ply_limit
-    )
-{
-    switch (state)
-    {
-        case boost::tree_node::pre_order_traversal:
-        {
-            ++ply_limit;
-            std::cout << "    ";
-
-            for (unsigned int ply = 0; ply < ply_limit; ++ply)
-            {
-                std::cout << "    ";
-            }
-
-            std::cout << "(boost::tree_node::pre_order_traversal, ";
-            break;
-        }
-
-        case boost::tree_node::post_order_traversal:
-        {
-            std::cout << "    ";
-
-            for (unsigned int ply = 0; ply < ply_limit; ++ply)
-            {
-                std::cout << "    ";
-            }
-
-            std::cout << "(boost::tree_node::post_order_traversal, ";
-            --ply_limit;
-            break;
-        }
-
-        default:
-        {
-            BOOST_ASSERT(false);
-        }
-    }
-}
-//]
-
-show_number_tree::show_number_tree() : ply_limit(1)
-{
-}
-
-show_key_and_number_tree::show_key_and_number_tree() : ply_limit(1)
-{
-}
-
-show_data_tree::show_data_tree() : ply_limit(1)
-{
-}
-
-show_key_and_data_tree::show_key_and_data_tree() : ply_limit(1)
-{
-}
-
Deleted: sandbox/tree_node/libs/tree_node/example/show_functions.hpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/show_functions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,160 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef LIBS_TREE_NODE_EXAMPLE_SHOW_FUNCTIONS_HPP_INCLUDED
-#define LIBS_TREE_NODE_EXAMPLE_SHOW_FUNCTIONS_HPP_INCLUDED
-
-#include <iostream>
-#include <boost/tree_node/traversal_state.hpp>
-#include <boost/tree_node/algorithm/dereference_iterator.hpp>
-
-void
-    show_tabs(
-        boost::tree_node::traversal_state state
-      , unsigned int& ply_limit
-    );
-
-//[example__show_number
-template <typename Node>
-void show_number(Node const& node)
-{
-    std::cout << ", " << node.get_data().number;
-}
-//]
-
-//[example__show_number_tree
-class show_number_tree
-{
-    unsigned int ply_limit;
-
- public:
-    show_number_tree();
-
-    template <typename Node>
-    void
-        operator()(
-            Node const& node
-          , boost::tree_node::traversal_state state
-        )
-    {
-        show_tabs(state, ply_limit);
-        std::cout << node.get_data().number << ')' << std::endl;
-    }
-};
-//]
-
-//[example__show_key_and_number
-template <typename Key, typename Node>
-void show_key_and_number(Key const& key, Node const& node)
-{
-    std::cout << "(\"" << key << "\", " << node.get_data().number << ')';
-}
-//]
-
-//[example__show_key_and_number_tree
-class show_key_and_number_tree
-{
-    unsigned int ply_limit;
-
- public:
-    show_key_and_number_tree();
-
-    template <typename Iterator>
-    void
-        operator()(
-            Iterator const& itr
-          , boost::tree_node::traversal_state state
-        )
-    {
-        show_tabs(state, ply_limit);
-        std::cout << '\"' << itr->first << "\", ";
-        std::cout << boost::tree_node::dereference_iterator(
-            itr
-        ).get_data().number;
-        std::cout << ')' << std::endl;
-    }
-};
-//]
-
-//[example__show_data
-template <typename Node>
-void show_data(Node const& node)
-{
-#if 0
-    std::cout << ", \"" << node.get_data() << '\"';
-#else
-    std::cout << "(\"" << node.get_data() << "\", " << node.get_height();
-    std::cout << ", " << node.get_count() << ')';
-#endif
-}
-//]
-
-//[example__show_data_tree
-class show_data_tree
-{
-    unsigned int ply_limit;
-
- public:
-    show_data_tree();
-
-    template <typename Node>
-    void
-        operator()(
-            Node const& node
-          , boost::tree_node::traversal_state state
-        )
-    {
-        show_tabs(state, ply_limit);
-        std::cout << '\"' << node.get_data() << "\", " << node.get_height();
-        std::cout << ", " << node.get_count() << ')' << std::endl;
-    }
-};
-//]
-
-//[example__show_key_and_data
-template <typename Key, typename Node>
-void show_key_and_data(Key const& key, Node const& node)
-{
-    std::cout << "(\"" << key << "\", \"" << node.get_data() << "\", ";
-    std::cout << node.get_height() << ", " << node.get_count() << ')';
-}
-//]
-
-//[example__show_key_and_data_tree
-class show_key_and_data_tree
-{
-    unsigned int ply_limit;
-
- public:
-    show_key_and_data_tree();
-
-    template <typename Iterator>
-    void
-        operator()(
-            Iterator const& itr
-          , boost::tree_node::traversal_state state
-        )
-    {
-        show_tabs(state, ply_limit);
-        std::cout << '\"' << itr->first << "\", \"";
-        std::cout << boost::tree_node::dereference_iterator(itr).get_data();
-        std::cout << "\", ";
-        std::cout << boost::tree_node::dereference_iterator(itr).get_height();
-        std::cout << ", ";
-        std::cout << boost::tree_node::dereference_iterator(itr).get_count();
-        std::cout << ')' << std::endl;
-    }
-};
-//]
-
-#if defined BOOST_TYPEOF_COMPLIANT
-#include <boost/typeof/typeof.hpp>
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-BOOST_TYPEOF_REGISTER_TYPE(show_data_tree)
-BOOST_TYPEOF_REGISTER_TYPE(show_key_and_data_tree)
-#endif
-
-#endif  // LIBS_TREE_NODE_EXAMPLE_SHOW_FUNCTIONS_HPP_INCLUDED
-
Deleted: sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,104 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ASSOC_ITERATORS_HPP_INCLUDED
-#define LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ASSOC_ITERATORS_HPP_INCLUDED
-
-#include <iostream>
-#include <boost/typeof/typeof.hpp>
-#include <boost/tree_node/typeof/breadth_first_desc_iterator.hpp>
-#include <boost/tree_node/typeof/pre_order_desc_iterator.hpp>
-#include <boost/tree_node/typeof/post_order_desc_iterator.hpp>
-#include <boost/tree_node/typeof/depth_first_desc_iterator.hpp>
-#include <boost/tree_node/traversal_state.hpp>
-#include <boost/tree_node/algorithm/dereference_iterator.hpp>
-
-//[example__showcase_associative_iterators
-template <
-    typename Node
-  , typename Function1
-  , typename Function2
-  , typename Function4
-  , typename Function3
->
-void
-    showcase_associative_iterators(
-        Node const& root
-      , Function1 show1
-      , Function2 show2
-      , Function3 show3
-      , Function4 show4
-    )
-{
-    std::cout << "  Breadth-first: ";
-    boost::tree_node::breadth_first_iterate(root, show1);
-    std::cout << std::endl << "    sans root:     ";
-
-    for (
-        BOOST_AUTO_TPL(
-            itr
-          , boost::tree_node::make_breadth_first_descendant_iterator(root)
-        );
-        itr;
-        ++itr
-    )
-    {
-        show3(itr->first, boost::tree_node::dereference_iterator(itr));
-    }
-
-    std::cout << std::endl << "  Pre-order:     ";
-    boost::tree_node::pre_order_iterate(root, show1);
-    std::cout << std::endl << "    sans root:     ";
-
-    for (
-        BOOST_AUTO_TPL(
-            itr
-          , boost::tree_node::make_pre_order_descendant_iterator(root)
-        );
-        itr;
-        ++itr
-    )
-    {
-        show3(itr->first, boost::tree_node::dereference_iterator(itr));
-    }
-
-    std::cout << std::endl << "  Post-order:    ";
-    boost::tree_node::post_order_iterate(root, show1);
-    std::cout << std::endl << "    sans root:   ";
-
-    for (
-        BOOST_AUTO_TPL(
-            itr
-          , boost::tree_node::make_post_order_descendant_iterator(root)
-        );
-        itr;
-        ++itr
-    )
-    {
-        show3(itr->first, boost::tree_node::dereference_iterator(itr));
-    }
-
-    std::cout << std::endl << "  Depth-first:" << std::endl;
-    boost::tree_node::depth_first_iterate(root, show2);
-    std::cout << std::endl << "    sans root:" << std::endl;
-
-    for (
-        BOOST_AUTO_TPL(
-            itr
-          , boost::tree_node::make_depth_first_descendant_iterator(root)
-        );
-        itr;
-        ++itr
-    )
-    {
-        show4(itr, boost::tree_node::traversal_state(itr));
-    }
-
-    std::cout << std::endl;
-}
-//]
-
-#endif  // LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ASSOC_ITERATORS_HPP_INCLUDED
-
Deleted: sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp
==============================================================================
--- sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
+++ (empty file)
@@ -1,62 +0,0 @@
-// Copyright (C) 2011-2012 Cromwell D. Enage
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ITERATORS_HPP_INCLUDED
-#define LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ITERATORS_HPP_INCLUDED
-
-#include <iostream>
-#include <boost/tree_node/breadth_first_iterator.hpp>
-#include <boost/tree_node/breadth_first_desc_iterator.hpp>
-#include <boost/tree_node/pre_order_iterator.hpp>
-#include <boost/tree_node/pre_order_desc_iterator.hpp>
-#include <boost/tree_node/post_order_iterator.hpp>
-#include <boost/tree_node/post_order_desc_iterator.hpp>
-#include <boost/tree_node/depth_first_iterator.hpp>
-#include <boost/tree_node/depth_first_desc_iterator.hpp>
-#include <boost/tree_node/in_order_iterator.hpp>
-
-//[example__showcase_iterators
-template <typename Node, typename Function1, typename Function2>
-void
-    showcase_iterators(
-        Node const& root
-      , Function1 show1
-      , Function2 show2
-    )
-{
-    std::cout << "  Breadth-first: ";
-    boost::tree_node::breadth_first_iterate(root, show1);
-    std::cout << std::endl << "    sans root:     ";
-    boost::tree_node::breadth_first_iterate_descendants(root, show1);
-    std::cout << std::endl << "  Pre-order:     ";
-    boost::tree_node::pre_order_iterate(root, show1);
-    std::cout << std::endl << "    sans root:     ";
-    boost::tree_node::pre_order_iterate_descendants(root, show1);
-    std::cout << std::endl << "  Post-order:    ";
-    boost::tree_node::post_order_iterate(root, show1);
-    std::cout << std::endl << "    sans root:   ";
-    boost::tree_node::post_order_iterate_descendants(root, show1);
-    std::cout << std::endl << "  Depth-first:" << std::endl;
-    boost::tree_node::depth_first_iterate(root, show2);
-    std::cout << std::endl << "    sans root:" << std::endl;
-    boost::tree_node::depth_first_iterate_descendants(root, show2);
-    std::cout << std::endl;
-}
-//]
-
-//[example__showcase_in_order_iterator
-template <typename Node, typename Function>
-void showcase_in_order_iterator(Node const& node, Function show)
-{
-    std::cout << "  In-order fwd:  ";
-    boost::tree_node::in_order_iterate_forward(node, show);
-    std::cout << std::endl << "  In-order bck:  ";
-    boost::tree_node::in_order_iterate_reverse(node, show);
-    std::cout << std::endl;
-}
-//]
-
-#endif  // LIBS_TREE_NODE_EXAMPLE_SHOWCASE_ITERATORS_HPP_INCLUDED
-
Added: sandbox/tree_node/libs/tree_node/example/type_definitions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/type_definitions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,61 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_EXAMPLE_TYPE_DEFINITIONS_HPP_INCLUDED
+#define LIBS_TREE_NODE_EXAMPLE_TYPE_DEFINITIONS_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/accumulators/statistics/sum_kahan.hpp>
+#include <boost/accumulators/statistics/max.hpp>
+#include <boost/accumulators/statistics/mean.hpp>
+#include <boost/tree_node/count_key.hpp>
+#include <boost/tree_node/height_key.hpp>
+#include <boost/tree_node/accumulation_key.hpp>
+
+typedef boost::tree_node::accumulation_key<
+            boost::tree_node::count_key
+          , boost::accumulators::tag::sum_kahan
+        >
+        AccuCountKey;
+typedef boost::tree_node::accumulation_key<
+            boost::tree_node::height_key
+          , boost::accumulators::tag::max
+          , boost::mpl::false_
+          , boost::mpl::false_
+        >
+        AccuHeightKey;
+typedef boost::tree_node::accumulation_key<
+            boost::tree_node::accumulation_key<>
+          , boost::accumulators::tag::mean
+        >
+        AccuAccuKey;
+
+namespace example_keys {
+
+    struct your_uint
+    {
+    };
+
+    struct your_char
+    {
+    };
+}
+
+typedef boost::tree_node::accumulation_key<example_keys::your_uint>
+        AccuYourUintKey;
+
+#include <boost/tree_node/preprocessor.hpp>
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+#include <boost/fusion/container/map.hpp>
+
+typedef boost::fusion::map<
+            boost::fusion::pair<example_keys::your_uint,unsigned int>
+          , boost::fusion::pair<example_keys::your_char,char>
+        >
+        DataMap;
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+#endif  // LIBS_TREE_NODE_EXAMPLE_TYPE_DEFINITIONS_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/test/associative_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/test/associative_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,9484 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <boost/config.hpp>
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "../example/type_definitions.hpp"
+#include "iterator_functions.hpp"
+
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        DFEmplacer;
+
+#include <boost/tree_node/typeof/associative_node.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+
+char const* names[] = {"able", "baker", "chuck", "dog", "easy", "fox"};
+
+template <typename Select, typename Node>
+void initialize(Node& root)
+{
+    for (boost::tree_node::breadth_first_iterator<Node> itr(root); itr; ++itr)
+    {
+        BOOST_AUTO_TPL(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            for (std::size_t i = 0; i < data; ++i)
+            {
+                for (std::size_t j = 0; j + i < data; ++j)
+                {
+                    typename Node::iterator find_itr(itr->find(names[j]));
+                    bool not_found = find_itr == itr->end();
+                    typename Node::iterator child_itr(
+                        itr->emplace(names[j], i)
+                    );
+                    Node& child(
+                        boost::tree_node::dereference_iterator(child_itr)
+                    );
+                    Node const& const_child(child);
+
+                    if (not_found)
+                    {
+                        typename Node::pointer child_ptr(
+                            child.get_parent_ptr()
+                        );
+                        BOOST_CHECK(
+                            child_ptr == &*itr
+//                          , "Ctor not linking child to parent."
+                        );
+                        BOOST_CHECK(
+                            child_ptr == const_child.get_parent_ptr()
+//                          , "Why are these pointers different?"
+                        );
+                    }
+                    else if (
+                        boost::is_unique_associative_selector<Select>::value
+                    )
+                    {
+                        BOOST_CHECK(
+                            find_itr->first == child_itr->first
+//                          , "Keys do not match."
+                        );
+                        BOOST_CHECK(
+                            get(
+                                boost::tree_node::dereference_iterator(
+                                    find_itr
+                                )
+                              , boost::tree_node::data_key()
+                            ) == get(
+                                const_child
+                              , boost::tree_node::data_key()
+                            )
+//                          , "Ctor not linking parent to child."
+                        );
+                    }
+                }
+            }
+        }
+    }
+}
+
+template <typename Selector>
+void test_unique_associative()
+{
+#if defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::with_count_gen<
+                        boost::tree_node::associative_node_gen<Selector>
+                    >
+                >
+              , char const*
+              , double
+            >
+            ANode;
+#else  // !defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::with_height_gen<
+                    boost::tree_node::with_accumulation_gen<
+                        boost::tree_node::with_position_gen<
+                            boost::tree_node::with_accumulation_gen<
+                                boost::tree_node::with_count_gen<
+                                    boost::tree_node::with_accumulation_gen<
+                                        boost::tree_node::associative_node_gen<
+                                            Selector
+                                        >
+                                    >
+                                >
+                              , AccuAccuKey
+                            >
+                        >
+                      , AccuCountKey
+                    >
+                >
+              , char const*
+              , double
+              , AccuHeightKey
+            >
+            ANode;
+#endif  // BOOST_NO_SFINAE
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            Values;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            DFValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    typename ANode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            KeyValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , typename ANode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            DFKeyValues;
+
+    ANode a_root(5.0);
+
+    BOOST_CHECK(
+        !a_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+
+    initialize<Selector>(a_root);
+
+    {
+        Values bf_vals, pre_vals, post_vals;
+        KeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFValues df_vals;
+        DFKeyValues df_d_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 1, 6)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 1, 6)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(5, 1, 6);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 1, 6)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 1, 6);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 1, 6, 5, 0, 11, 0);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+    {
+        ANode a_copy(a_root);
+        boost::tree_node::breadth_first_iterator<ANode const>
+            bf_root_itr(a_root), bf_copy_itr(a_copy);
+        boost::tree_node::breadth_first_descendant_iterator<ANode const>
+            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);
+        boost::tree_node::pre_order_iterator<ANode const>
+            pre_root_itr(a_root), pre_copy_itr(a_copy);
+        boost::tree_node::pre_order_descendant_iterator<ANode const>
+            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);
+        boost::tree_node::post_order_iterator<ANode const>
+            post_root_itr(a_root), post_copy_itr(a_copy);
+        boost::tree_node::post_order_descendant_iterator<ANode const>
+            post_d_root_itr(a_root), post_d_copy_itr(a_copy);
+        boost::tree_node::depth_first_iterator<ANode const>
+            df_root_itr(a_root), df_copy_itr(a_copy);
+        boost::tree_node::depth_first_descendant_iterator<ANode const>
+            df_d_root_itr(a_root), df_d_copy_itr(a_copy);
+
+        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(bf_d_root_itr, bf_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(pre_root_itr, pre_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(pre_d_root_itr, pre_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(post_root_itr, post_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(post_d_root_itr, post_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(df_d_root_itr, df_d_copy_itr)
+        );
+    }
+
+    {
+        typename ANode::iterator a_child_itr(
+          boost::tree_node::dereference_iterator(
+            a_root.find(names[2])
+          ).insert(names[5], a_root)
+        );
+        Values bf_vals, pre_vals, post_vals;
+        KeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFValues df_vals;
+        DFKeyValues df_d_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 3, 12)(0, 0, 1)(0, 0, 1)(0, 2, 7)(0, 0, 1)(0, 0, 1)
+            (5, 1, 6)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 3, 12)(0, 0, 1)(0, 0, 1)(0, 2, 7)(5, 1, 6)(0, 0, 1)
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(5, 1, 6)(0, 2, 7)(0, 0, 1)(0, 0, 1)(5, 3, 12);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 2, 7)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1)("fox", 5, 1, 6)
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 2, 7)
+            ("fox", 5, 1, 6)("able", 0, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("dog", 0, 0, 1)("easy", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 0, 0, 1)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1)("fox", 5, 1, 6)("chuck", 0, 2, 7)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 2, 7)
+                (boost::tree_node::pre_order_traversal, "fox", 5, 1, 6)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", 5, 1, 6)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 2, 7)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 3, 12)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 2, 7)
+                    (boost::tree_node::pre_order_traversal, 5, 1, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 5, 1, 6)
+                (boost::tree_node::post_order_traversal, 0, 2, 7)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 3, 12);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 3, 12, 10, 2, 34, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 2, 7, 5, 1, 18, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 3, 12, 10, 2, 34, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 2, 7, 5, 1, 18, 1)
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0)
+            (0, 2, 7, 5, 1, 18, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 3, 12, 10, 2, 34, 1);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 2, 7, 5, 1, 18, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("fox", 5, 1, 6, 5, 0, 11, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 2, 7, 5, 1, 18, 1)("fox", 5, 1, 6, 5, 0, 11, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("fox", 5, 1, 6, 5, 0, 11, 0)
+            ("chuck", 0, 2, 7, 5, 1, 18, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",0,2,7,5,1,18,1)
+            (boost::tree_node::pre_order_traversal, "fox",5,1,6,5,0,11,0)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "fox",5,1,6,5,0,11,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,2,7,5,1,18,1)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 3, 12, 10, 2, 34, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 2, 7, 5, 1, 18, 1)
+              (boost::tree_node::pre_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+            (boost::tree_node::post_order_traversal, 0, 2, 7, 5, 1, 18, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 3, 12, 10, 2, 34, 1);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        a_root = boost::tree_node::dereference_iterator(a_child_itr);
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 1, 6)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 1, 6)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(5, 1, 6);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 1, 6)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 1, 6);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 1, 6, 5, 0, 11, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 1, 6, 5, 0, 11, 0);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        a_child_itr = a_root.find(names[2]);
+        boost::tree_node::dereference_iterator(a_child_itr) = a_root;
+        test_associative_node(
+            boost::tree_node::dereference_iterator(a_child_itr)
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 2, 11)(0, 0, 1)(0, 0, 1)(5, 1, 6)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 2, 11)(0, 0, 1)(0, 0, 1)(5, 1, 6)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(5, 1, 6)(0, 0, 1)(0, 0, 1)(5, 2, 11);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 5, 1, 6)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1)("able", 0, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 0, 0, 1)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 5, 1, 6)
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 0, 0, 1)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 0, 0, 1)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1)("chuck", 5, 1, 6)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 5, 1, 6)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 5, 1, 6)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 2, 11)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 5, 1, 6)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 5, 1, 6)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 2, 11);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 2, 11, 10, 1, 26, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 2, 11, 10, 1, 26, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 6, 5, 0, 11, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (5, 2, 11, 10, 1, 26, 1);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 5, 1, 6, 5, 0, 11, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 5, 1, 6, 5, 0, 11, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("easy", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("chuck", 5, 1, 6, 5, 0, 11, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",5,1,6,5,0,11,0)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",5,1,6,5,0,11,0)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 2, 11, 10, 1, 26, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 5, 1, 6, 5, 0, 11, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 2, 11, 10, 1, 26, 1);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(
+                a_child_itr
+            ).erase(names[1]) == 1
+        );
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 2, 10)(0, 0, 1)(0, 0, 1)(5, 1, 5)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 2, 10)(0, 0, 1)(0, 0, 1)(5, 1, 5)(0, 0, 1)(0, 0, 1)
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)(0, 0, 1)
+            (5, 1, 5)(0, 0, 1)(0, 0, 1)(5, 2, 10);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 5, 1, 5)
+            ("dog", 0, 0, 1)("easy", 0, 0, 1)("able", 0, 0, 1)
+            ("chuck", 0, 0, 1)("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("chuck", 5, 1, 5)
+            ("able", 0, 0, 1)("chuck", 0, 0, 1)("dog", 0, 0, 1)
+            ("easy", 0, 0, 1)("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("chuck", 0, 0, 1)("dog", 0, 0, 1)("easy", 0, 0, 1)
+            ("chuck", 5, 1, 5)("dog", 0, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 5, 1, 5)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 5, 1, 5)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 5, 1, 5)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 5, 1, 5)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 2, 10);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 2, 10, 10, 1, 23, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 5, 5, 0, 9, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 2, 10, 10, 1, 23, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 1, 5, 5, 0, 9, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (5, 1, 5, 5, 0, 9, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(5, 2, 10, 10, 1, 23, 1);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 5, 1, 5, 5, 0, 9, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 5, 1, 5, 5, 0, 9, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("easy", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 5, 1, 5, 5, 0, 9, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",5,1,5,5,0,9,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",5,1,5,5,0,9,1)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 2, 10, 10, 1, 23, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 5, 1, 5, 5, 0, 9, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 5, 1, 5, 5, 0, 9, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 2, 10, 10, 1, 23, 1);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::associative_node_gen<Selector>
+              , char const*
+              , DataMap
+              , AccuYourUintKey
+            >
+            FNode;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    typename FNode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreKeyValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , typename FNode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreKeyValues;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO_TPL(
+            data
+          , boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(itr)
+            )
+        );
+
+        if (1 < data)
+        {
+            for (unsigned int i = 0; i < data; ++i)
+            {
+                for (std::size_t j = 0; j + i < data; ++j)
+                {
+                    itr->emplace(
+                        names[j]
+                      , boost::fusion::make_pair<example_keys::your_uint>(i)
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + i
+                        )
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        MoreValues bf_vals, pre_vals, post_vals;
+        MoreKeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFMoreKeyValues df_d_vals;
+        DFMoreValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            (5, '5', 5)(0, '0', 0)(0, '0', 0)(0, '0', 0)(0, '0', 0)
+            (0, '0', 0);
+        emplacer[pre_vals]
+            (5, '5', 5)(0, '0', 0)(0, '0', 0)(0, '0', 0)(0, '0', 0)
+            (0, '0', 0);
+        emplacer[post_vals]
+            (0, '0', 0)(0, '0', 0)(0, '0', 0)(0, '0', 0)(0, '0', 0)
+            (5, '5', 5);
+        emplacer[bf_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 0, '0', 0)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[pre_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 0, '0', 0)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[post_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 0, '0', 0)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "easy",0,'0',0)
+          (boost::tree_node::post_order_traversal, "easy",0,'0',0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5,'5',5)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+          (boost::tree_node::post_order_traversal, 5,'5',5);
+        test_f_associative_node(
+            f_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        put(
+            boost::tree_node::dereference_iterator(f_root.find(names[2]))
+          , example_keys::your_uint()
+          , 7
+        );
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+        emplacer[bf_vals]
+            (5, '5', 12)(0, '0', 0)(0, '0', 0)(7, '0', 7)(0, '0', 0)
+            (0, '0', 0);
+        emplacer[pre_vals]
+            (5, '5', 12)(0, '0', 0)(0, '0', 0)(7, '0', 7)(0, '0', 0)
+            (0, '0', 0);
+        emplacer[post_vals]
+            (0, '0', 0)(0, '0', 0)(7, '0', 7)(0, '0', 0)(0, '0', 0)
+            (5, '5', 12);
+        emplacer[bf_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 7, '0', 7)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[pre_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 7, '0', 7)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[post_d_vals]
+            ("able", 0, '0', 0)("baker", 0, '0', 0)("chuck", 7, '0', 7)
+            ("dog", 0, '0', 0)("easy", 0, '0', 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "chuck",7,'0',7)
+          (boost::tree_node::post_order_traversal, "chuck",7,'0',7)
+          (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "easy",0,'0',0)
+          (boost::tree_node::post_order_traversal, "easy",0,'0',0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5,'5',12)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 7,'0',7)
+            (boost::tree_node::post_order_traversal, 7,'0',7)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+          (boost::tree_node::post_order_traversal, 5,'5',12);
+        test_f_associative_node(
+            f_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+}
+
+template <typename Selector>
+void test_multiple_associative()
+{
+#if defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::with_count_gen<
+                        boost::tree_node::associative_node_gen<Selector>
+                    >
+                >
+              , char const*
+              , double
+            >
+            ANode;
+#else  // !defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::with_height_gen<
+                    boost::tree_node::with_accumulation_gen<
+                        boost::tree_node::with_position_gen<
+                            boost::tree_node::with_accumulation_gen<
+                                boost::tree_node::with_count_gen<
+                                    boost::tree_node::with_accumulation_gen<
+                                        boost::tree_node::associative_node_gen<
+                                            Selector
+                                        >
+                                    >
+                                >
+                              , AccuAccuKey
+                            >
+                        >
+                      , AccuCountKey
+                    >
+                >
+              , char const*
+              , double
+              , AccuHeightKey
+            >
+            ANode;
+#endif  // BOOST_NO_SFINAE
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            Values;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            DFValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    typename ANode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            KeyValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , typename ANode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            DFKeyValues;
+
+    ANode a_root(5.0);
+
+    BOOST_CHECK(
+        !a_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+
+    initialize<Selector>(a_root);
+
+    {
+        Values bf_vals, pre_vals, post_vals;
+        KeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFValues df_vals;
+        DFKeyValues df_d_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 68)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 68)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(5, 4, 68);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("baker", 3, 2, 10)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 3, 2, 10)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 2, 1, 4)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 68)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 4, 68);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 4, 68, 55, 3, 211, 2);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 4, 68, 55, 3, 211, 2);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+    {
+        ANode a_copy(a_root);
+        boost::tree_node::breadth_first_iterator<ANode const>
+            bf_root_itr(a_root), bf_copy_itr(a_copy);
+        boost::tree_node::breadth_first_descendant_iterator<ANode const>
+            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);
+        boost::tree_node::pre_order_iterator<ANode const>
+            pre_root_itr(a_root), pre_copy_itr(a_copy);
+        boost::tree_node::pre_order_descendant_iterator<ANode const>
+            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);
+        boost::tree_node::post_order_iterator<ANode const>
+            post_root_itr(a_root), post_copy_itr(a_copy);
+        boost::tree_node::post_order_descendant_iterator<ANode const>
+            post_d_root_itr(a_root), post_d_copy_itr(a_copy);
+        boost::tree_node::depth_first_iterator<ANode const>
+            df_root_itr(a_root), df_copy_itr(a_copy);
+        boost::tree_node::depth_first_descendant_iterator<ANode const>
+            df_d_root_itr(a_root), df_d_copy_itr(a_copy);
+
+        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(bf_d_root_itr, bf_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(pre_root_itr, pre_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(pre_d_root_itr, pre_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(post_root_itr, post_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(post_d_root_itr, post_d_copy_itr)
+        );
+        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));
+        BOOST_CHECK(
+            test_associative_node_copies(df_d_root_itr, df_d_copy_itr)
+        );
+    }
+
+    {
+        typename ANode::iterator a_child_itr(
+          boost::tree_node::dereference_iterator(
+            a_root.find(names[2])
+          ).insert(names[5], a_root)
+        );
+        Values bf_vals, pre_vals, post_vals;
+        KeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFValues df_vals;
+        DFKeyValues df_d_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 136)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 5, 69)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(5, 4, 68)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 136)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 5, 69)
+            (5, 4, 68)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(5, 4, 68)
+            (0, 5, 69)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(5, 6, 136);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("baker", 3, 2, 10)
+            ("chuck", 0, 5, 69)("chuck", 1, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("fox", 5, 4, 68)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 3, 2, 10)
+            ("able", 4, 3, 26)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("baker", 3, 2, 10)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("chuck", 2, 1, 4)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 3, 2, 10)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 5, 69)("fox", 5, 4, 68)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 3, 2, 10)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("able", 4, 3, 26)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("baker", 3, 2, 10)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 2, 1, 4)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1)("fox", 5, 4, 68)
+            ("chuck", 0, 5, 69)("chuck", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 5, 69)
+                (boost::tree_node::pre_order_traversal, "fox", 5, 4, 68)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", 5, 4, 68)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 5, 69)
+            (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 136)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 5, 69)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 68)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 4, 3, 26)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 5, 4, 68)
+                (boost::tree_node::post_order_traversal, 0, 5, 69)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 6, 136);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 136, 110, 5, 558, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 5, 69, 55, 4, 280, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (4, 3, 26, 21, 2, 69, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 6, 136, 110, 5, 558, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 5, 69, 55, 4, 280, 2)
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 4, 68, 55, 3, 211, 2)
+            (0, 5, 69, 55, 4, 280, 2)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 6, 136, 110, 5, 558, 2);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 5, 69, 55, 4, 280, 2)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("fox", 5, 4, 68, 55, 3, 211, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 1, 0, 1, 1, 0, 1, 1)("easy", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 5, 69, 55, 4, 280, 2)("fox", 5, 4, 68, 55, 3, 211, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("fox", 5, 4, 68, 55, 3, 211, 2)
+            ("chuck", 0, 5, 69, 55, 4, 280, 2)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "chuck",0,5,69,55,4,280,2)
+            (boost::tree_node::pre_order_traversal, "fox",5,4,68,55,3,211,2)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "fox",5,4,68,55,3,211,2)
+          (boost::tree_node::post_order_traversal, "chuck",0,5,69,55,4,280,2)
+          (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 136, 110, 5, 558, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 0, 5, 69, 55, 4, 280, 2)
+              (boost::tree_node::pre_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+            (boost::tree_node::post_order_traversal, 0, 5, 69, 55, 4, 280, 2)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 6, 136, 110, 5, 558, 2);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        a_root = boost::tree_node::dereference_iterator(a_child_itr);
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 68)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 68)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(5, 4, 68);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("baker", 3, 2, 10)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 3, 2, 10)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 2, 1, 4)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 68)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 4, 68);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 4, 68, 55, 3, 211, 2);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 4, 68, 55, 3, 211, 2);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        a_child_itr = boost::begin(a_root.equal_range(names[2]));
+
+        while (boost::tree_node::dereference_iterator(a_child_itr).empty())
+        {
+            ++a_child_itr;
+        }
+
+        a_child_itr = boost::begin(
+            boost::tree_node::dereference_iterator(
+                a_child_itr
+            ).equal_range(names[1])
+        );
+        boost::tree_node::dereference_iterator(a_child_itr) = a_root;
+        test_associative_node(
+            boost::tree_node::dereference_iterator(a_child_itr)
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 135)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (2, 5, 71)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(5, 4, 68)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 135)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 5, 71)(0, 0, 1)(1, 0, 1)(5, 4, 68)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(4, 3, 26)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(5, 4, 68)(2, 5, 71)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(5, 6, 135);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("baker", 3, 2, 10)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 5, 71)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 5, 4, 68)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 3, 2, 10)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("baker", 3, 2, 10)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 1, 4)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 5, 71)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 5, 4, 68)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 3, 2, 10)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 4, 3, 26)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 3, 2, 10)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("chuck", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 3, 2, 10)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("baker", 3, 2, 10)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("baker", 5, 4, 68)("chuck", 2, 5, 71)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 2, 5, 71)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 5, 4, 68)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 5, 4, 68)
+            (boost::tree_node::post_order_traversal, "chuck", 2, 5, 71)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 135)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 5, 71)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 68)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 4, 3, 26)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 5, 4, 68)
+                (boost::tree_node::post_order_traversal, 2, 5, 71)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 6, 135);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 135, 110, 5, 555, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 5, 71, 58, 4, 284, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 6, 135, 110, 5, 555, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 5, 71, 58, 4, 284, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 68, 55, 3, 211, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 4, 68, 55, 3, 211, 2)
+            (2, 5, 71, 58, 4, 284, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (5, 6, 135, 110, 5, 555, 2);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 5, 71, 58, 4, 284, 2)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 5, 4, 68, 55, 3, 211, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 5, 71, 58, 4, 284, 2)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 5, 4, 68, 55, 3, 211, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 1, 0, 1, 1, 0, 1, 1)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("baker", 5, 4, 68, 55, 3, 211, 2)
+            ("chuck", 2, 5, 71, 58, 4, 284, 2)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 1, 0, 1, 1, 0, 1, 1)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,5,71,58,4,284,2)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",5,4,68,55,3,211,2)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",5,4,68,55,3,211,2)
+          (boost::tree_node::post_order_traversal, "chuck",2,5,71,58,4,284,2)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 135, 110, 5, 555, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 5, 71, 58, 4, 284, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 5, 4, 68, 55, 3, 211, 2)
+            (boost::tree_node::post_order_traversal, 2, 5, 71, 58, 4, 284, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 6, 135, 110, 5, 555, 2);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(
+                a_child_itr
+            ).erase(names[1]) == 4
+        );
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 119)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (2, 5, 55)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(5, 4, 52)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(3, 2, 10)(4, 3, 26)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 119)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 5, 55)(0, 0, 1)(1, 0, 1)(5, 4, 52)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)(0, 0, 1)(1, 0, 1)
+            (2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 4)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(4, 3, 26)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(3, 2, 10)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(4, 3, 26)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(2, 1, 4)(0, 0, 1)(1, 0, 1)(0, 0, 1)(5, 4, 52)
+            (2, 5, 55)(0, 0, 1)(1, 0, 1)(0, 0, 1)(5, 6, 119);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("able", 4, 3, 26)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("baker", 2, 1, 4)("baker", 3, 2, 10)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 5, 55)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 5, 4, 52)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 3, 2, 10)("able", 4, 3, 26)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("chuck", 2, 1, 4)
+            ("dog", 0, 0, 1)("dog", 1, 0, 1)("easy", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 4, 3, 26)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 1, 0, 1)("dog", 0, 0, 1)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 5, 55)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 5, 4, 52)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 3, 2, 10)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 4, 3, 26)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("baker", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("chuck", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("able", 2, 1, 4)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("chuck", 0, 0, 1)("able", 3, 2, 10)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("baker", 2, 1, 4)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("dog", 0, 0, 1)("able", 4, 3, 26)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("baker", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("baker", 3, 2, 10)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("able", 2, 1, 4)("baker", 0, 0, 1)
+            ("baker", 1, 0, 1)("chuck", 0, 0, 1)("able", 3, 2, 10)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("able", 0, 0, 1)
+            ("able", 1, 0, 1)("baker", 0, 0, 1)("able", 2, 1, 4)
+            ("baker", 0, 0, 1)("baker", 1, 0, 1)("chuck", 0, 0, 1)
+            ("able", 3, 2, 10)("baker", 0, 0, 1)("baker", 1, 0, 1)
+            ("able", 0, 0, 1)("able", 1, 0, 1)("baker", 0, 0, 1)
+            ("baker", 2, 1, 4)("chuck", 0, 0, 1)("chuck", 1, 0, 1)
+            ("dog", 0, 0, 1)("able", 4, 3, 26)("chuck", 0, 0, 1)
+            ("chuck", 1, 0, 1)("able", 0, 0, 1)("able", 1, 0, 1)
+            ("baker", 0, 0, 1)("chuck", 2, 1, 4)("dog", 0, 0, 1)
+            ("dog", 1, 0, 1)("easy", 0, 0, 1)("baker", 5, 4, 52)
+            ("chuck", 2, 5, 55)("dog", 0, 0, 1)("dog", 1, 0, 1)
+            ("easy", 0, 0, 1);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+            (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+            (boost::tree_node::pre_order_traversal, "baker", 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", 3, 2, 10)
+            (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "chuck", 2, 5, 55)
+                (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", 5, 4, 52)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "able", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "baker", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "chuck", 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, "easy", 0, 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", 5, 4, 52)
+            (boost::tree_node::post_order_traversal, "chuck", 2, 5, 55)
+            (boost::tree_node::pre_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 0, 0, 1)
+            (boost::tree_node::pre_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::post_order_traversal, "dog", 1, 0, 1)
+            (boost::tree_node::pre_order_traversal, "easy", 0, 0, 1)
+            (boost::tree_node::post_order_traversal, "easy", 0, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 119)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 4, 3, 26)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 4)
+                (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 4)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 2, 10)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 5, 55)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 52)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 3, 2, 10)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 26)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 3, 2, 10)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 4, 3, 26)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 4)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 4)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 5, 4, 52)
+                (boost::tree_node::post_order_traversal, 2, 5, 55)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+            (boost::tree_node::post_order_traversal, 5, 6, 119);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 119, 98, 5, 476, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 5, 55, 46, 4, 221, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 52, 43, 3, 164, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (3, 2, 10, 8, 1, 22, 1)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_vals]
+            (5, 6, 119, 98, 5, 476, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 5, 55, 46, 4, 221, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 52, 43, 3, 164, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (3, 2, 10, 8, 1, 22, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 4, 3, 0, 7, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(3, 2, 10, 8, 1, 22, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(4, 3, 26, 21, 2, 69, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 4, 3, 0, 7, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(5, 4, 52, 43, 3, 164, 2)
+            (2, 5, 55, 46, 4, 221, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (5, 6, 119, 98, 5, 476, 2);
+        emplacer[bf_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 5, 55, 46, 4, 221, 2)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 5, 4, 52, 43, 3, 164, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[pre_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 5, 55, 46, 4, 221, 2)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 5, 4, 52, 43, 3, 164, 2)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 3, 2, 10, 8, 1, 22, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 4, 3, 26, 21, 2, 69, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("baker", 1, 0, 1, 1, 0, 1, 1)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 1, 0, 1, 1, 0, 1, 1)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 2, 1, 4, 3, 0, 7, 1)("able", 0, 0, 1, 0, 0, 1, 0)
+            ("able", 1, 0, 1, 1, 0, 1, 1)("baker", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 1, 0, 1, 1, 0, 1, 1)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[post_d_vals]
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("baker", 3, 2, 10, 8, 1, 22, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("able", 2, 1, 4, 3, 0, 7, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("able", 3, 2, 10, 8, 1, 22, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("baker", 2, 1, 4, 3, 0, 7, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("able", 4, 3, 26, 21, 2, 69, 1)
+            ("chuck", 0, 0, 1, 0, 0, 1, 0)("chuck", 1, 0, 1, 1, 0, 1, 1)
+            ("able", 0, 0, 1, 0, 0, 1, 0)("able", 1, 0, 1, 1, 0, 1, 1)
+            ("baker", 0, 0, 1, 0, 0, 1, 0)("chuck", 2, 1, 4, 3, 0, 7, 1)
+            ("dog", 0, 0, 1, 0, 0, 1, 0)("dog", 1, 0, 1, 1, 0, 1, 1)
+            ("easy", 0, 0, 1, 0, 0, 1, 0)("baker", 5, 4, 52, 43, 3, 164, 2)
+            ("chuck", 2, 5, 55, 46, 4, 221, 2)("dog", 0, 0, 1, 0, 0, 1, 0)
+            ("dog", 1, 0, 1, 1, 0, 1, 1)("easy", 0, 0, 1, 0, 0, 1, 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+          (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+          (boost::tree_node::pre_order_traversal, "baker",3,2,10,8,1,22,1)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+            (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "baker",3,2,10,8,1,22,1)
+          (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,5,55,46,4,221,2)
+            (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+            (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+            (boost::tree_node::pre_order_traversal, "baker",5,4,52,43,3,164,2)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",3,2,10,8,1,22,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "baker",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",4,3,26,21,2,69,1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "chuck",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "able",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "able",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "baker",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "chuck",2,1,4,3,0,7,1)
+              (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+              (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+              (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+              (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0)
+            (boost::tree_node::post_order_traversal, "baker",5,4,52,43,3,164,2)
+          (boost::tree_node::post_order_traversal, "chuck",2,5,55,46,4,221,2)
+          (boost::tree_node::pre_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "dog",0,0,1,0,0,1,0)
+          (boost::tree_node::pre_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::post_order_traversal, "dog",1,0,1,1,0,1,1)
+          (boost::tree_node::pre_order_traversal, "easy",0,0,1,0,0,1,0)
+          (boost::tree_node::post_order_traversal, "easy",0,0,1,0,0,1,0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 119, 98, 5, 476, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 5, 55, 46, 4, 221, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 5, 4, 52, 43, 3, 164, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 3, 2, 10, 8, 1, 22, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 4, 3, 26, 21, 2, 69, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 2, 1, 4, 3, 0, 7, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 5, 4, 52, 43, 3, 164, 2)
+            (boost::tree_node::post_order_traversal, 2, 5, 55, 46, 4, 221, 2)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+          (boost::tree_node::post_order_traversal, 5, 6, 119, 98, 5, 476, 2);
+#endif  // BOOST_NO_SFINAE
+        test_associative_node(
+            a_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::associative_node_gen<Selector>
+              , char const*
+              , DataMap
+              , AccuYourUintKey
+            >
+            FNode;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    typename FNode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreKeyValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , typename FNode::traits::key_type
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreKeyValues;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO_TPL(
+            data
+          , boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(itr)
+            )
+        );
+
+        if (1 < data)
+        {
+            for (unsigned int i = 0; i < data; ++i)
+            {
+                for (std::size_t j = 0; j + i < data; ++j)
+                {
+                    itr->emplace(
+                        names[j]
+                      , boost::fusion::make_pair<example_keys::your_uint>(i)
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + i
+                        )
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        MoreValues bf_vals, pre_vals, post_vals;
+        MoreKeyValues bf_d_vals, pre_d_vals, post_d_vals;
+        DFMoreKeyValues df_d_vals;
+        DFMoreValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            (5, '5', 55)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)
+            (4, '4', 21)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0);
+        emplacer[pre_vals]
+            (5, '5', 55)(0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(3, '3', 8)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(4, '4', 21)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(3, '3', 8)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(3, '3', 8)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0);
+        emplacer[post_vals]
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (3, '3', 8)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(3, '3', 8)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(4, '4', 21)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(3, '3', 8)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(5, '5', 55);
+        emplacer[bf_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 3, '3', 8)("able", 4, '4', 21)("baker", 0, '0', 0)
+            ("baker", 1, '1', 1)("baker", 2, '2', 3)("baker", 3, '3', 8)
+            ("chuck", 0, '0', 0)("chuck", 1, '1', 1)("chuck", 2, '2', 3)
+            ("dog", 0, '0', 0)("dog", 1, '1', 1)("easy", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 3, '3', 8)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("baker", 2, '2', 3)("chuck", 0, '0', 0)("chuck", 1, '1', 1)
+            ("dog", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0);
+        emplacer[pre_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 4, '4', 21)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("able", 2, '2', 3)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 3, '3', 8)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("chuck", 0, '0', 0)("chuck", 1, '1', 1)("dog", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("baker", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("chuck", 0, '0', 0)("chuck", 1, '1', 1)
+            ("chuck", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("dog", 0, '0', 0)("dog", 1, '1', 1)
+            ("easy", 0, '0', 0);
+        emplacer[post_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("able", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 3, '3', 8)("baker", 0, '0', 0)
+            ("baker", 1, '1', 1)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 2, '2', 3)("chuck", 0, '0', 0)
+            ("chuck", 1, '1', 1)("dog", 0, '0', 0)("able", 4, '4', 21)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("baker", 3, '3', 8)("chuck", 0, '0', 0)("chuck", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("chuck", 2, '2', 3)("dog", 0, '0', 0)("dog", 1, '1', 1)
+            ("easy", 0, '0', 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+          (boost::tree_node::post_order_traversal, "able",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "able",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",3,'3',8)
+          (boost::tree_node::pre_order_traversal, "able",4,'4',21)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",3,'3',8)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+                (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+                (boost::tree_node::post_order_traversal, "able",0,'0',0)
+                (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+                (boost::tree_node::post_order_traversal, "able",1,'1',1)
+                (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+                (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+              (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+              (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,'1',1)
+            (boost::tree_node::post_order_traversal, "chuck",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+            (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",4,'4',21)
+          (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+          (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "baker",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "baker",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",3,'3',8)
+          (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "chuck",1,'1',1)
+          (boost::tree_node::post_order_traversal, "chuck",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "chuck",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "dog",1,'1',1)
+          (boost::tree_node::post_order_traversal, "dog",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "easy",0,'0',0)
+          (boost::tree_node::post_order_traversal, "easy",0,'0',0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5,'5',55)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 3,'3',8)
+            (boost::tree_node::pre_order_traversal, 4,'4',21)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 3,'3',8)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 2,'2',3)
+                  (boost::tree_node::pre_order_traversal, 0,'0',0)
+                  (boost::tree_node::post_order_traversal, 0,'0',0)
+                  (boost::tree_node::pre_order_traversal, 1,'1',1)
+                  (boost::tree_node::post_order_traversal, 1,'1',1)
+                  (boost::tree_node::pre_order_traversal, 0,'0',0)
+                  (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 4,'4',21)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 3,'3',8)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+          (boost::tree_node::post_order_traversal, 5,'5',55);
+        test_f_associative_node(
+            f_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+
+        put(
+            boost::tree_node::dereference_iterator(f_root.find(names[2]))
+          , example_keys::your_uint()
+          , 7
+        );
+        bf_vals.clear();
+        bf_d_vals.clear();
+        pre_vals.clear();
+        pre_d_vals.clear();
+        post_vals.clear();
+        post_d_vals.clear();
+        df_vals.clear();
+        df_d_vals.clear();
+
+        emplacer[bf_vals]
+            (5, '5', 62)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)
+            (4, '4', 21)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)
+            (7, '0', 7)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 8)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0);
+        emplacer[pre_vals]
+            (5, '5', 62)(0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(3, '3', 8)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(4, '4', 21)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(3, '3', 8)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(3, '3', 8)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(0, '0', 0)(1, '1', 1)(0, '0', 0)(7, '0', 7)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0);
+        emplacer[post_vals]
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (3, '3', 8)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(3, '3', 8)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(4, '4', 21)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(3, '3', 8)(7, '0', 7)(1, '1', 1)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(0, '0', 0)(5, '5', 62);
+        emplacer[bf_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 3, '3', 8)("able", 4, '4', 21)("baker", 0, '0', 0)
+            ("baker", 1, '1', 1)("baker", 2, '2', 3)("baker", 3, '3', 8)
+            ("chuck", 7, '0', 7)("chuck", 1, '1', 1)("chuck", 2, '2', 3)
+            ("dog", 0, '0', 0)("dog", 1, '1', 1)("easy", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 3, '3', 8)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("baker", 2, '2', 3)("chuck", 0, '0', 0)("chuck", 1, '1', 1)
+            ("dog", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0);
+        emplacer[pre_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 4, '4', 21)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("able", 2, '2', 3)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 3, '3', 8)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("chuck", 0, '0', 0)("chuck", 1, '1', 1)("dog", 0, '0', 0)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("baker", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("chuck", 7, '0', 7)("chuck", 1, '1', 1)
+            ("chuck", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("dog", 0, '0', 0)("dog", 1, '1', 1)
+            ("easy", 0, '0', 0);
+        emplacer[post_d_vals]
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("able", 3, '3', 8)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 2, '2', 3)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("able", 2, '2', 3)("baker", 0, '0', 0)("baker", 1, '1', 1)
+            ("chuck", 0, '0', 0)("able", 3, '3', 8)("baker", 0, '0', 0)
+            ("baker", 1, '1', 1)("able", 0, '0', 0)("able", 1, '1', 1)
+            ("baker", 0, '0', 0)("baker", 2, '2', 3)("chuck", 0, '0', 0)
+            ("chuck", 1, '1', 1)("dog", 0, '0', 0)("able", 4, '4', 21)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("baker", 2, '2', 3)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("able", 0, '0', 0)
+            ("able", 1, '1', 1)("baker", 0, '0', 0)("able", 2, '2', 3)
+            ("baker", 0, '0', 0)("baker", 1, '1', 1)("chuck", 0, '0', 0)
+            ("baker", 3, '3', 8)("chuck", 7, '0', 7)("chuck", 1, '1', 1)
+            ("able", 0, '0', 0)("able", 1, '1', 1)("baker", 0, '0', 0)
+            ("chuck", 2, '2', 3)("dog", 0, '0', 0)("dog", 1, '1', 1)
+            ("easy", 0, '0', 0);
+        emplacer[df_d_vals]
+          (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+          (boost::tree_node::post_order_traversal, "able",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "able",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",3,'3',8)
+          (boost::tree_node::pre_order_traversal, "able",4,'4',21)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",3,'3',8)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+                (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+                (boost::tree_node::post_order_traversal, "able",0,'0',0)
+                (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+                (boost::tree_node::post_order_traversal, "able",1,'1',1)
+                (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+                (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+              (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+              (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "chuck",1,'1',1)
+            (boost::tree_node::post_order_traversal, "chuck",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+            (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "able",4,'4',21)
+          (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+          (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "baker",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "baker",3,'3',8)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "able",2,'2',3)
+              (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+              (boost::tree_node::post_order_traversal, "able",0,'0',0)
+              (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+              (boost::tree_node::post_order_traversal, "able",1,'1',1)
+              (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+              (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::post_order_traversal, "baker",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "chuck",0,'0',0)
+            (boost::tree_node::post_order_traversal, "chuck",0,'0',0)
+          (boost::tree_node::post_order_traversal, "baker",3,'3',8)
+          (boost::tree_node::pre_order_traversal, "chuck",7,'0',7)
+          (boost::tree_node::post_order_traversal, "chuck",7,'0',7)
+          (boost::tree_node::pre_order_traversal, "chuck",1,'1',1)
+          (boost::tree_node::post_order_traversal, "chuck",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "chuck",2,'2',3)
+            (boost::tree_node::pre_order_traversal, "able",0,'0',0)
+            (boost::tree_node::post_order_traversal, "able",0,'0',0)
+            (boost::tree_node::pre_order_traversal, "able",1,'1',1)
+            (boost::tree_node::post_order_traversal, "able",1,'1',1)
+            (boost::tree_node::pre_order_traversal, "baker",0,'0',0)
+            (boost::tree_node::post_order_traversal, "baker",0,'0',0)
+          (boost::tree_node::post_order_traversal, "chuck",2,'2',3)
+          (boost::tree_node::pre_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::post_order_traversal, "dog",0,'0',0)
+          (boost::tree_node::pre_order_traversal, "dog",1,'1',1)
+          (boost::tree_node::post_order_traversal, "dog",1,'1',1)
+          (boost::tree_node::pre_order_traversal, "easy",0,'0',0)
+          (boost::tree_node::post_order_traversal, "easy",0,'0',0);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5,'5',62)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 3,'3',8)
+            (boost::tree_node::pre_order_traversal, 4,'4',21)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 3,'3',8)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 2,'2',3)
+                  (boost::tree_node::pre_order_traversal, 0,'0',0)
+                  (boost::tree_node::post_order_traversal, 0,'0',0)
+                  (boost::tree_node::pre_order_traversal, 1,'1',1)
+                  (boost::tree_node::post_order_traversal, 1,'1',1)
+                  (boost::tree_node::pre_order_traversal, 0,'0',0)
+                  (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 4,'4',21)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 3,'3',8)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 2,'2',3)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+                (boost::tree_node::pre_order_traversal, 1,'1',1)
+                (boost::tree_node::post_order_traversal, 1,'1',1)
+                (boost::tree_node::pre_order_traversal, 0,'0',0)
+                (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 3,'3',8)
+            (boost::tree_node::pre_order_traversal, 7,'0',7)
+            (boost::tree_node::post_order_traversal, 7,'0',7)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 2,'2',3)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+              (boost::tree_node::pre_order_traversal, 1,'1',1)
+              (boost::tree_node::post_order_traversal, 1,'1',1)
+              (boost::tree_node::pre_order_traversal, 0,'0',0)
+              (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 2,'2',3)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+            (boost::tree_node::pre_order_traversal, 1,'1',1)
+            (boost::tree_node::post_order_traversal, 1,'1',1)
+            (boost::tree_node::pre_order_traversal, 0,'0',0)
+            (boost::tree_node::post_order_traversal, 0,'0',0)
+          (boost::tree_node::post_order_traversal, 5,'5',62);
+        test_f_associative_node(
+            f_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+        );
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+}
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors_typeof.hpp>
+#include <boost/container_gen/c_str_cmp_selectors_typeof.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_map.hpp>
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/mpl/bool.hpp>
+#include <boost/typeof/boost/container/map.hpp>
+#include <boost/typeof/boost/container/flat_map.hpp>
+#endif
+#else  // !defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/c_str_cmp_selectors.hpp>
+#endif  // BOOST_TYPEOF_EMULATION
+
+int test_main(int argc, char** argv)
+{
+    test_unique_associative<
+        boost::ptr_map_selector<boost::c_str_ordering_selector>
+    >();
+    test_multiple_associative<
+        boost::ptr_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_unique_associative<
+        boost::map_selector<boost::mpl::true_,boost::c_str_ordering_selector>
+    >();
+    test_multiple_associative<
+        boost::multimap_selector<
+            boost::mpl::true_
+          , boost::c_str_ordering_selector
+        >
+    >();
+    test_unique_associative<
+        boost::flat_map_selector<boost::c_str_ordering_selector>
+    >();
+    test_multiple_associative<
+        boost::flat_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#endif
+
+    return 0;
+}
+
Added: sandbox/tree_node/libs/tree_node/test/binary_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/test/binary_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1898 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <boost/config.hpp>
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "../example/type_definitions.hpp"
+#include "iterator_functions.hpp"
+
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        DFEmplacer;
+
+#include <boost/tree_node/typeof/binary_node.hpp>
+
+#if defined BOOST_NO_SFINAE
+typedef boost::tree_node::with_height<
+            boost::tree_node::with_position_gen<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::binary_node_gen
+                >
+            >
+          , double
+        >
+        ANode;
+#else  // !defined BOOST_NO_SFINAE
+typedef boost::tree_node::with_accumulation<
+            boost::tree_node::with_height_gen<
+                boost::tree_node::with_accumulation_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::with_accumulation_gen<
+                            boost::tree_node::with_count_gen<
+                                boost::tree_node::with_accumulation_gen<
+                                    boost::tree_node::binary_node_gen
+                                >
+                            >
+                          , AccuAccuKey
+                        >
+                    >
+                  , AccuCountKey
+                >
+            >
+          , double
+          , void
+          , AccuHeightKey
+        >
+        ANode;
+#endif  // BOOST_NO_SFINAE
+
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::data_key()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::height_key()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::count_key()
+                    )
+                )
+#if !defined BOOST_NO_SFINAE
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<
+                        boost::tree_node::accumulation_key<>
+                    >(boost::get_reference<ANode const>())
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuHeightKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuCountKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuAccuKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+#endif  // BOOST_NO_SFINAE
+            >
+        >::type
+        Values;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::data_key()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::height_key()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    get(
+                        boost::get_reference<ANode const>()
+                      , boost::tree_node::count_key()
+                    )
+                )
+#if !defined BOOST_NO_SFINAE
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<
+                        boost::tree_node::accumulation_key<>
+                    >(boost::get_reference<ANode const>())
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuHeightKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuCountKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+              , BOOST_TYPEOF(
+                    boost::tree_node::get<AccuAccuKey>(
+                        boost::get_reference<ANode const>()
+                    )
+                )
+#endif  // BOOST_NO_SFINAE
+            >
+        >::type
+        DFValues;
+
+int test_main(int argc, char** argv)
+{
+    ANode a_root(5.0);
+
+    BOOST_CHECK(
+        !a_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            ANode::iterator child_itr(itr->emplace_left(data - 2));
+            ANode::const_pointer const_child(&*child_itr);
+
+            BOOST_CHECK(
+                child_itr->get_parent_ptr() == &*itr
+//              , "Ctor not linking child to parent."
+            );
+            BOOST_CHECK(
+                itr->get_left_child_ptr() == &*child_itr
+//              , "Ctor not linking parent to child."
+            );
+            BOOST_CHECK(
+                child_itr->get_parent_ptr() == const_child->get_parent_ptr()
+//              , "Why are these pointers different?"
+            );
+            BOOST_CHECK(
+                get(
+                    *child_itr
+                  , boost::tree_node::position_key()
+                ) == child_itr
+//              , "Position iterator incorrect."
+            );
+
+            child_itr = itr->emplace_right(data - 1);
+            const_child = &*child_itr;
+
+            BOOST_CHECK(
+                child_itr->get_parent_ptr() == &*itr
+//              , "Ctor not linking child to parent."
+            );
+            BOOST_CHECK(
+                itr->get_right_child_ptr() == &*child_itr
+//              , "Ctor not linking parent to child."
+            );
+            BOOST_CHECK(
+                child_itr->get_parent_ptr() == const_child->get_parent_ptr()
+//              , "Why are these pointers different?"
+            );
+            BOOST_CHECK(
+                get(
+                    *child_itr
+                  , boost::tree_node::position_key()
+                ) == child_itr
+//              , "Position iterator incorrect."
+            );
+        }
+    }
+
+    {
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 15)(3, 2, 5)(4, 3, 9)(1, 0, 1)(2, 1, 3)(2, 1, 3)(3, 2, 5)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 15)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 9)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 3, 9)
+            (5, 4, 15);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 4, 15)(0, 0, 1)
+            (2, 1, 3)(1, 0, 1)(4, 3, 9)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 15)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 4, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 3, 9)
+            (boost::tree_node::post_order_traversal, 5, 4, 15);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 15, 26, 3, 51, 4)(3, 2, 5, 7, 1, 11, 2)
+            (4, 3, 9, 14, 2, 25, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 4, 15, 26, 3, 51, 4)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 9, 14, 2, 25, 3)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(4, 3, 9, 14, 2, 25, 3)
+            (5, 4, 15, 26, 3, 51, 4);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 4, 15, 26, 3, 51, 4)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+          (boost::tree_node::post_order_traversal, 5, 4, 15, 26, 3, 51, 4);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    {
+        ANode a_copy(a_root);
+        boost::tree_node::breadth_first_iterator<ANode const>
+            bf_root_itr(a_root), bf_copy_itr(a_copy);
+        boost::tree_node::breadth_first_descendant_iterator<ANode const>
+            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);
+        boost::tree_node::pre_order_iterator<ANode const>
+            pre_root_itr(a_root), pre_copy_itr(a_copy);
+        boost::tree_node::pre_order_descendant_iterator<ANode const>
+            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);
+        boost::tree_node::post_order_iterator<ANode const>
+            post_root_itr(a_root), post_copy_itr(a_copy);
+        boost::tree_node::post_order_descendant_iterator<ANode const>
+            post_d_root_itr(a_root), post_d_copy_itr(a_copy);
+        boost::tree_node::in_order_iterator<ANode const>
+            in_root_itr(a_root), in_copy_itr(a_copy);
+        boost::tree_node::depth_first_iterator<ANode const>
+            df_root_itr(a_root), df_copy_itr(a_copy);
+        boost::tree_node::depth_first_descendant_iterator<ANode const>
+            df_d_root_itr(a_root), df_d_copy_itr(a_copy);
+
+        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));
+        BOOST_CHECK(test_node_copies(bf_d_root_itr, bf_d_copy_itr));
+        BOOST_CHECK(test_node_copies(pre_root_itr, pre_copy_itr));
+        BOOST_CHECK(test_node_copies(pre_d_root_itr, pre_d_copy_itr));
+        BOOST_CHECK(test_node_copies(post_root_itr, post_copy_itr));
+        BOOST_CHECK(test_node_copies(post_d_root_itr, post_d_copy_itr));
+        BOOST_CHECK(test_node_copies(in_root_itr, in_copy_itr));
+        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));
+        BOOST_CHECK(test_node_copies(df_d_root_itr, df_d_copy_itr));
+    }
+
+    {
+        ANode::pointer p = a_root.get_left_child_ptr()->get_left_child_ptr();
+        ANode::iterator a_child_itr = p->insert_left(a_root);
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 7, 30)(3, 6, 20)(4, 3, 9)(1, 5, 16)(2, 1, 3)(2, 1, 3)(3, 2, 5)
+            (5, 4, 15)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 5)(4, 3, 9)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(2, 1, 3)
+            (3, 2, 5)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 7, 30)(3, 6, 20)(1, 5, 16)(5, 4, 15)(3, 2, 5)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(4, 3, 9)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 5)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (4, 3, 9)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 3, 9)
+            (5, 4, 15)(1, 5, 16)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 6, 20)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)
+            (4, 3, 9)(5, 7, 30);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 4, 15)(0, 0, 1)
+            (2, 1, 3)(1, 0, 1)(4, 3, 9)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(1, 5, 16)(3, 6, 20)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 7, 30)
+            (0, 0, 1)(2, 1, 3)(1, 0, 1)(4, 3, 9)(1, 0, 1)(3, 2, 5)(0, 0, 1)
+            (2, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 7, 30)
+                (boost::tree_node::pre_order_traversal, 3, 6, 20)
+                    (boost::tree_node::pre_order_traversal, 1, 5, 16)
+                        (boost::tree_node::pre_order_traversal, 5, 4, 15)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::post_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 4, 3, 9)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::post_order_traversal, 3, 2, 5)
+                            (boost::tree_node::post_order_traversal, 4, 3, 9)
+                        (boost::tree_node::post_order_traversal, 5, 4, 15)
+                    (boost::tree_node::post_order_traversal, 1, 5, 16)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 6, 20)
+                (boost::tree_node::pre_order_traversal, 4, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 3, 9)
+            (boost::tree_node::post_order_traversal, 5, 7, 30);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 7, 30, 52, 6, 147, 7)(3, 6, 20, 33, 5, 92, 6)
+            (4, 3, 9, 14, 2, 25, 3)(1, 5, 16, 27, 4, 67, 5)
+            (2, 1, 3, 3, 0, 5, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(5, 4, 15, 26, 3, 51, 4)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(4, 3, 9, 14, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 7, 30, 52, 6, 147, 7)(3, 6, 20, 33, 5, 92, 6)
+            (1, 5, 16, 27, 4, 67, 5)(5, 4, 15, 26, 3, 51, 4)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(4, 3, 9, 14, 2, 25, 3)
+            (5, 4, 15, 26, 3, 51, 4)(1, 5, 16, 27, 4, 67, 5)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 6, 20, 33, 5, 92, 6)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (4, 3, 9, 14, 2, 25, 3)(5, 7, 30, 52, 6, 147, 7);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 4, 15, 26, 3, 51, 4)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(1, 5, 16, 27, 4, 67, 5)
+            (3, 6, 20, 33, 5, 92, 6)(0, 0, 1, 0, 0, 1, 0)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (5, 7, 30, 52, 6, 147, 7)(0, 0, 1, 0, 0, 1, 0)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 9, 14, 2, 25, 3)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 7, 30, 52, 6, 147, 7)
+            (boost::tree_node::pre_order_traversal, 3, 6, 20, 33, 5, 92, 6)
+              (boost::tree_node::pre_order_traversal, 1, 5, 16, 27, 4, 67, 5)
+              (boost::tree_node::pre_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::post_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::post_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+              (boost::tree_node::post_order_traversal, 1, 5, 16, 27, 4, 67, 5)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 6, 20, 33, 5, 92, 6)
+            (boost::tree_node::pre_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+          (boost::tree_node::post_order_traversal, 5, 7, 30, 52, 6, 147, 7);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+
+        a_root = *a_child_itr;
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        in_vals.clear();
+        df_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 15)(3, 2, 5)(4, 3, 9)(1, 0, 1)(2, 1, 3)(2, 1, 3)(3, 2, 5)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 15)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 9)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 3, 9)
+            (5, 4, 15);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 4, 15)(0, 0, 1)
+            (2, 1, 3)(1, 0, 1)(4, 3, 9)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 15)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 4, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 3, 9)
+            (boost::tree_node::post_order_traversal, 5, 4, 15);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 15, 26, 3, 51, 4)(3, 2, 5, 7, 1, 11, 2)
+            (4, 3, 9, 14, 2, 25, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 4, 15, 26, 3, 51, 4)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 9, 14, 2, 25, 3)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(4, 3, 9, 14, 2, 25, 3)
+            (5, 4, 15, 26, 3, 51, 4);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 4, 15, 26, 3, 51, 4)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+          (boost::tree_node::post_order_traversal, 5, 4, 15, 26, 3, 51, 4);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+
+        *(p = a_root.get_right_child_ptr()) = a_root;
+        test_node(*p, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        in_vals.clear();
+        df_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21)(3, 2, 5)(5, 4, 15)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 3, 9)
+            (0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(2, 1, 3)(3, 2, 5)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 21)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(5, 4, 15)
+            (3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 9)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)(2, 1, 3)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 3, 9)(5, 4, 15)(5, 5, 21);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 5, 21)(1, 0, 1)
+            (3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 4, 15)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(4, 3, 9)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 21)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 5, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 4, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                    (boost::tree_node::post_order_traversal, 4, 3, 9)
+                (boost::tree_node::post_order_traversal, 5, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 21);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21, 38, 4, 83, 5)(3, 2, 5, 7, 1, 11, 2)
+            (5, 4, 15, 26, 3, 51, 4)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (4, 3, 9, 14, 2, 25, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 21, 38, 4, 83, 5)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 15, 26, 3, 51, 4)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 9, 14, 2, 25, 3)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (4, 3, 9, 14, 2, 25, 3)(5, 4, 15, 26, 3, 51, 4)
+            (5, 5, 21, 38, 4, 83, 5);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 5, 21, 38, 4, 83, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 4, 15, 26, 3, 51, 4)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 9, 14, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 21, 38, 4, 83, 5)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::post_order_traversal, 4, 3, 9, 14, 2, 25, 3)
+            (boost::tree_node::post_order_traversal, 5, 4, 15, 26, 3, 51, 4)
+          (boost::tree_node::post_order_traversal, 5, 5, 21, 38, 4, 83, 5);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    a_root.get_right_child_ptr()->rotate_left();
+
+    {
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21)(3, 2, 5)(4, 4, 15)(1, 0, 1)(2, 1, 3)(5, 3, 9)(3, 2, 5)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(2, 1, 3)(1, 0, 1)(2, 1, 3)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 21)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 4, 15)
+            (5, 3, 9)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)(2, 1, 3)(5, 3, 9)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(4, 4, 15)(5, 5, 21);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 5, 21)(1, 0, 1)
+            (3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 3, 9)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(4, 4, 15)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 21)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 4, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 5, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 5, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 21);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21, 38, 4, 83, 5)(3, 2, 5, 7, 1, 11, 2)
+            (4, 4, 15, 26, 3, 51, 4)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 21, 38, 4, 83, 5)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 4, 15, 26, 3, 51, 4)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(4, 4, 15, 26, 3, 51, 4)
+            (5, 5, 21, 38, 4, 83, 5);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 5, 21, 38, 4, 83, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 3, 9, 15, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 4, 15, 26, 3, 51, 4)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 21, 38, 4, 83, 5)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 4, 4, 15, 26, 3, 51, 4)
+              (boost::tree_node::pre_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::post_order_traversal, 4, 4, 15, 26, 3, 51, 4)
+          (boost::tree_node::post_order_traversal, 5, 5, 21, 38, 4, 83, 5);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    {
+        ANode::pointer p(a_root.get_right_child_ptr()->get_right_child_ptr());
+        ANode::iterator p_child_itr(p->emplace_right());
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+        put(*p_child_itr, boost::tree_node::data_key(), 7);
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21)(3, 2, 5)(4, 4, 15)(1, 0, 1)(2, 1, 3)(5, 3, 9)(3, 2, 5)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(2, 1, 3)(1, 0, 1)(7, 1, 3)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 21)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 4, 15)
+            (5, 3, 9)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(7, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)(2, 1, 3)(5, 3, 9)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(7, 1, 3)(3, 2, 5)(4, 4, 15)(5, 5, 21);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 5, 21)(1, 0, 1)
+            (3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 3, 9)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(4, 4, 15)(1, 0, 1)(3, 2, 5)(0, 0, 1)(7, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 21)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 4, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 5, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 5, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 7, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 7, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 21);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21, 43, 4, 83, 6)(3, 2, 5, 7, 1, 11, 2)
+            (4, 4, 15, 31, 3, 51, 5)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 12, 1, 11, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 21, 43, 4, 83, 6)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 4, 15, 31, 3, 51, 5)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 12, 1, 11, 4)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(7, 1, 3, 8, 0, 5, 3)
+            (3, 2, 5, 12, 1, 11, 4)(4, 4, 15, 31, 3, 51, 5)
+            (5, 5, 21, 43, 4, 83, 6);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 5, 21, 43, 4, 83, 6)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 3, 9, 15, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 4, 15, 31, 3, 51, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 12, 1, 11, 4)
+            (0, 0, 1, 0, 0, 1, 0)(7, 1, 3, 8, 0, 5, 3)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 21, 43, 4, 83, 6)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+              (boost::tree_node::pre_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+            (boost::tree_node::post_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+          (boost::tree_node::post_order_traversal, 5, 5, 21, 43, 4, 83, 6);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    a_root.get_left_child_ptr()->rotate_right();
+
+    {
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21)(1, 0, 5)(4, 4, 15)(3, 2, 4)(5, 3, 9)(3, 2, 5)(2, 1, 3)
+            (3, 2, 5)(2, 1, 3)(1, 0, 1)(7, 1, 3)(0, 0, 1)(1, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 21)(1, 0, 5)(3, 2, 4)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 4, 15)
+            (5, 3, 9)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(7, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 4)(1, 0, 5)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)(2, 1, 3)(5, 3, 9)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(7, 1, 3)(3, 2, 5)(4, 4, 15)(5, 5, 21);
+        emplacer[in_vals]
+            (1, 0, 5)(3, 2, 4)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 5, 21)(1, 0, 1)
+            (3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 3, 9)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(4, 4, 15)(1, 0, 1)(3, 2, 5)(0, 0, 1)(7, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 21)
+                (boost::tree_node::pre_order_traversal, 1, 0, 5)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 4)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 4)
+                (boost::tree_node::post_order_traversal, 1, 0, 5)
+                (boost::tree_node::pre_order_traversal, 4, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 5, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 5, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 7, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 7, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 21);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21, 43, 4, 86, 6)(1, 0, 5, 7, 2, 14, 3)
+            (4, 4, 15, 31, 3, 51, 5)(3, 2, 4, 6, 1, 9, 2)
+            (5, 3, 9, 15, 2, 25, 3)(3, 2, 5, 12, 1, 11, 4)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 21, 43, 4, 86, 6)(1, 0, 5, 7, 2, 14, 3)
+            (3, 2, 4, 6, 1, 9, 2)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 4, 15, 31, 3, 51, 5)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 12, 1, 11, 4)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 4, 6, 1, 9, 2)
+            (1, 0, 5, 7, 2, 14, 3)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(7, 1, 3, 8, 0, 5, 3)
+            (3, 2, 5, 12, 1, 11, 4)(4, 4, 15, 31, 3, 51, 5)
+            (5, 5, 21, 43, 4, 86, 6);
+        emplacer[in_vals]
+            (1, 0, 5, 7, 2, 14, 3)(3, 2, 4, 6, 1, 9, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 5, 21, 43, 4, 86, 6)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 3, 9, 15, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 4, 15, 31, 3, 51, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 12, 1, 11, 4)
+            (0, 0, 1, 0, 0, 1, 0)(7, 1, 3, 8, 0, 5, 3)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 21, 43, 4, 86, 6)
+            (boost::tree_node::pre_order_traversal, 1, 0, 5, 7, 2, 14, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 4, 6, 1, 9, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 4, 6, 1, 9, 2)
+            (boost::tree_node::post_order_traversal, 1, 0, 5, 7, 2, 14, 3)
+            (boost::tree_node::pre_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+              (boost::tree_node::pre_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+            (boost::tree_node::post_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+          (boost::tree_node::post_order_traversal, 5, 5, 21, 43, 4, 86, 6);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    a_root.get_left_child_ptr()->rotate_left();
+
+    {
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21)(3, 2, 5)(4, 4, 15)(1, 0, 1)(2, 1, 3)(5, 3, 9)(3, 2, 5)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(2, 1, 3)(1, 0, 1)(7, 1, 3)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 21)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 4, 15)
+            (5, 3, 9)(3, 2, 5)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)(7, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)(1, 0, 1)(2, 1, 3)(5, 3, 9)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(7, 1, 3)(3, 2, 5)(4, 4, 15)(5, 5, 21);
+        emplacer[in_vals]
+            (1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 5, 21)(1, 0, 1)
+            (3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)(5, 3, 9)(0, 0, 1)(2, 1, 3)
+            (1, 0, 1)(4, 4, 15)(1, 0, 1)(3, 2, 5)(0, 0, 1)(7, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 21)
+                (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::pre_order_traversal, 4, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 5, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 5, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 7, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 7, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 21);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 21, 43, 4, 83, 6)(3, 2, 5, 7, 1, 11, 2)
+            (4, 4, 15, 31, 3, 51, 5)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 12, 1, 11, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 21, 43, 4, 83, 6)(3, 2, 5, 7, 1, 11, 2)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 4, 15, 31, 3, 51, 5)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 12, 1, 11, 4)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(7, 1, 3, 8, 0, 5, 3)
+            (3, 2, 5, 12, 1, 11, 4)(4, 4, 15, 31, 3, 51, 5)
+            (5, 5, 21, 43, 4, 83, 6);
+        emplacer[in_vals]
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 5, 21, 43, 4, 83, 6)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 3, 9, 15, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 4, 15, 31, 3, 51, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 12, 1, 11, 4)
+            (0, 0, 1, 0, 0, 1, 0)(7, 1, 3, 8, 0, 5, 3)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 21, 43, 4, 83, 6)
+            (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+            (boost::tree_node::pre_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+              (boost::tree_node::pre_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+            (boost::tree_node::post_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+          (boost::tree_node::post_order_traversal, 5, 5, 21, 43, 4, 83, 6);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    a_root.begin()->clear();
+
+    {
+        Values bf_vals, pre_vals, post_vals, in_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 17)(3, 0, 1)(4, 4, 15)(5, 3, 9)(3, 2, 5)(3, 2, 5)(2, 1, 3)
+            (1, 0, 1)(7, 1, 3)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 5, 17)(3, 0, 1)(4, 4, 15)(5, 3, 9)(3, 2, 5)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 5)(1, 0, 1)
+            (7, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (3, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 5)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(5, 3, 9)(1, 0, 1)(0, 0, 1)(1, 0, 1)(7, 1, 3)
+            (3, 2, 5)(4, 4, 15)(5, 5, 17);
+        emplacer[in_vals]
+            (3, 0, 1)(5, 5, 17)(1, 0, 1)(3, 2, 5)(0, 0, 1)(2, 1, 3)(1, 0, 1)
+            (5, 3, 9)(0, 0, 1)(2, 1, 3)(1, 0, 1)(4, 4, 15)(1, 0, 1)(3, 2, 5)
+            (0, 0, 1)(7, 1, 3)(1, 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 5, 17)
+                (boost::tree_node::pre_order_traversal, 3, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 0, 1)
+                (boost::tree_node::pre_order_traversal, 4, 4, 15)
+                    (boost::tree_node::pre_order_traversal, 5, 3, 9)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 5, 3, 9)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 5)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 7, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 7, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 5)
+                (boost::tree_node::post_order_traversal, 4, 4, 15)
+            (boost::tree_node::post_order_traversal, 5, 5, 17);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 5, 17, 39, 4, 69, 7)(3, 0, 1, 3, 0, 1, 3)
+            (4, 4, 15, 31, 3, 51, 5)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 12, 1, 11, 4)(3, 2, 5, 7, 1, 11, 2)
+            (2, 1, 3, 3, 0, 5, 1)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 5, 17, 39, 4, 69, 7)(3, 0, 1, 3, 0, 1, 3)
+            (4, 4, 15, 31, 3, 51, 5)(5, 3, 9, 15, 2, 25, 3)
+            (3, 2, 5, 7, 1, 11, 2)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 5, 12, 1, 11, 4)(1, 0, 1, 1, 0, 1, 1)
+            (7, 1, 3, 8, 0, 5, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (3, 0, 1, 3, 0, 1, 3)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 3, 9, 15, 2, 25, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(7, 1, 3, 8, 0, 5, 3)
+            (3, 2, 5, 12, 1, 11, 4)(4, 4, 15, 31, 3, 51, 5)
+            (5, 5, 17, 39, 4, 69, 7);
+        emplacer[in_vals]
+            (3, 0, 1, 3, 0, 1, 3)(5, 5, 17, 39, 4, 69, 7)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 7, 1, 11, 2)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(5, 3, 9, 15, 2, 25, 3)
+            (0, 0, 1, 0, 0, 1, 0)(2, 1, 3, 3, 0, 5, 1)
+            (1, 0, 1, 1, 0, 1, 1)(4, 4, 15, 31, 3, 51, 5)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 5, 12, 1, 11, 4)
+            (0, 0, 1, 0, 0, 1, 0)(7, 1, 3, 8, 0, 5, 3)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 5, 17, 39, 4, 69, 7)
+            (boost::tree_node::pre_order_traversal, 3, 0, 1, 3, 0, 1, 3)
+            (boost::tree_node::post_order_traversal, 3, 0, 1, 3, 0, 1, 3)
+            (boost::tree_node::pre_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+              (boost::tree_node::pre_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 7, 1, 11, 2)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 5, 3, 9, 15, 2, 25, 3)
+              (boost::tree_node::pre_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 7, 1, 3, 8, 0, 5, 3)
+              (boost::tree_node::post_order_traversal, 3, 2, 5, 12, 1, 11, 4)
+            (boost::tree_node::post_order_traversal, 4, 4, 15, 31, 3, 51, 5)
+          (boost::tree_node::post_order_traversal, 5, 5, 17, 39, 4, 69, 7);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::binary_node_gen
+              , DataMap
+              , void
+              , AccuYourUintKey
+            >
+            FNode;
+    typedef boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreValues;
+    typedef boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreValues;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO(data, boost::tree_node::get<example_keys::your_uint>(*itr));
+
+        if (1 < data)
+        {
+            --data;
+            itr->emplace_right(
+                boost::fusion::make_pair<example_keys::your_uint>(data)
+              , boost::fusion::make_pair<example_keys::your_char>('0' + data)
+            );
+            --data;
+            itr->emplace_left(
+                boost::fusion::make_pair<example_keys::your_uint>(data)
+              , boost::fusion::make_pair<example_keys::your_char>('0' + data)
+            );
+        }
+    }
+
+    {
+        MoreValues bf_vals, pre_vals, post_vals, in_vals;
+        DFMoreValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            (5, '5', 26)(3, '3', 7)(4, '4', 14)(1, '1', 1)(2, '2', 3)
+            (2, '2', 3)(3, '3', 7)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[pre_vals]
+            (5, '5', 26)(3, '3', 7)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(4, '4', 14)(2, '2', 3)(0, '0', 0)(1, '1', 1)
+            (3, '3', 7)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[post_vals]
+            (1, '1', 1)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 7)
+            (0, '0', 0)(1, '1', 1)(2, '2', 3)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(3, '3', 7)(4, '4', 14)(5, '5', 26);
+        emplacer[in_vals]
+            (1, '1', 1)(3, '3', 7)(0, '0', 0)(2, '2', 3)(1, '1', 1)
+            (5, '5', 26)(0, '0', 0)(2, '2', 3)(1, '1', 1)(4, '4', 14)
+            (1, '1', 1)(3, '3', 7)(0, '0', 0)(2, '2', 3)(1, '1', 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, '5', 26)
+                (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::pre_order_traversal, 4, '4', 14)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                            (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                            (boost::tree_node::post_order_traversal, 0, '0', 0)
+                            (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                            (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::post_order_traversal, 4, '4', 14)
+            (boost::tree_node::post_order_traversal, 5, '5', 26);
+        test_f_node(f_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+
+    put(
+        *f_root.get_right_child_ptr()->get_left_child_ptr()
+      , example_keys::your_uint()
+      , 7
+    );
+
+    {
+        MoreValues bf_vals, pre_vals, post_vals, in_vals;
+        DFMoreValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            (5, '5', 31)(3, '3', 7)(4, '4', 19)(1, '1', 1)(2, '2', 3)
+            (7, '2', 8)(3, '3', 7)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[pre_vals]
+            (5, '5', 31)(3, '3', 7)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(4, '4', 19)(7, '2', 8)(0, '0', 0)(1, '1', 1)
+            (3, '3', 7)(1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[post_vals]
+            (1, '1', 1)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 7)
+            (0, '0', 0)(1, '1', 1)(7, '2', 8)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(3, '3', 7)(4, '4', 19)(5, '5', 31);
+        emplacer[in_vals]
+            (1, '1', 1)(3, '3', 7)(0, '0', 0)(2, '2', 3)(1, '1', 1)
+            (5, '5', 31)(0, '0', 0)(7, '2', 8)(1, '1', 1)(4, '4', 19)
+            (1, '1', 1)(3, '3', 7)(0, '0', 0)(2, '2', 3)(1, '1', 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, '5', 31)
+                (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::pre_order_traversal, 4, '4', 19)
+                    (boost::tree_node::pre_order_traversal, 7, '2', 8)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 7, '2', 8)
+                    (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                            (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                            (boost::tree_node::post_order_traversal, 0, '0', 0)
+                            (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                            (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::post_order_traversal, 4, '4', 19)
+            (boost::tree_node::post_order_traversal, 5, '5', 31);
+        test_f_node(f_root, bf_vals, pre_vals, post_vals, in_vals, df_vals);
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+
+    return 0;
+}
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
Added: sandbox/tree_node/libs/tree_node/test/iterator_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/test/iterator_functions.hpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,844 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef LIBS_TREE_NODE_TEST_ITERATOR_FUNCTIONS_HPP_INCLUDED
+#define LIBS_TREE_NODE_TEST_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/pre_order_iterator.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+#include <boost/tree_node/post_order_desc_iterator.hpp>
+#include <boost/tree_node/in_order_iterator.hpp>
+#include <boost/tree_node/depth_first_iterator.hpp>
+#include <boost/tree_node/depth_first_desc_iterator.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include "../example/type_definitions.hpp"
+#include <boost/test/minimal.hpp>
+
+template <typename Node>
+void test_children(Node const& node)
+{
+    typename Node::const_iterator iend = node.end();
+
+    for (typename Node::const_iterator itr = node.begin(); itr != iend; ++itr)
+    {
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(
+                itr
+            ).get_parent_ptr() == &node
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr)
+              , boost::tree_node::position_key()
+            ) == itr
+        );
+    }
+}
+
+template <typename TreeItr, typename Itr>
+bool test_iterators(TreeItr tree_itr, Itr itr, Itr itr_end)
+{
+    while (tree_itr)
+    {
+        if (itr == itr_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::data_key()
+            ) == boost::get<0>(*itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::height_key()
+            ) == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::count_key()
+            ) == boost::get<2>(*itr)
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<3>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<4>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<5>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<6>(*itr)
+        );
+#endif
+        test_children(boost::tree_node::dereference_iterator(tree_itr));
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+    return true;
+}
+
+template <typename DFItr, typename TupleItr>
+bool test_df_iterator(DFItr df_itr, TupleItr t_itr, TupleItr t_end)
+{
+    while (df_itr)
+    {
+        if (t_itr == t_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == boost::get<0>(*t_itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::data_key()
+            ) == boost::get<1>(*t_itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::height_key()
+            ) == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::count_key()
+            ) == boost::get<3>(*t_itr)
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<4>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<5>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<6>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<7>(*t_itr)
+        );
+#endif
+        test_children(boost::tree_node::dereference_iterator(df_itr));
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+    return true;
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+>
+void
+    test_node(
+        Node const& node
+      , Values const& bf_vals
+      , Values const& pre_vals
+      , Values const& post_vals
+      , DFValues const& df_vals
+    )
+{
+    boost::tree_node::breadth_first_iterator<Node const> bf_itr(node);
+    boost::tree_node::breadth_first_descendant_iterator<Node const> bf_d_itr(
+        node
+    );
+    boost::tree_node::pre_order_iterator<Node const> pre_itr(node);
+    boost::tree_node::pre_order_descendant_iterator<Node const> pre_d_itr(
+        node
+    );
+    boost::tree_node::post_order_iterator<Node const> post_itr(node);
+    boost::tree_node::post_order_descendant_iterator<Node const> post_d_itr(
+        node
+    );
+    boost::tree_node::depth_first_iterator<Node const> df_itr(node);
+    boost::tree_node::depth_first_descendant_iterator<Node const> df_d_itr(
+        node
+    );
+    Values p_d_vals(post_vals);
+    DFValues df_d_vals(df_vals);
+
+    BOOST_CHECK(test_iterators(bf_itr, bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(test_iterators(bf_d_itr, ++bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(test_iterators(pre_itr, pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(test_iterators(pre_d_itr, ++pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(test_iterators(post_itr, post_vals.begin(), post_vals.end()));
+    p_d_vals.pop_back();
+    BOOST_CHECK(test_iterators(post_d_itr, p_d_vals.begin(), p_d_vals.end()));
+    BOOST_CHECK(test_df_iterator(df_itr, df_vals.begin(), df_vals.end()));
+    df_d_vals.pop_front();
+    df_d_vals.pop_back();
+    BOOST_CHECK(
+        test_df_iterator(df_d_itr, df_d_vals.begin(), df_d_vals.end())
+    );
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+>
+void
+    test_node(
+        Node const& node
+      , Values const& bf_vals
+      , Values const& pre_vals
+      , Values const& post_vals
+      , Values const& in_vals
+      , DFValues const& df_vals
+    )
+{
+    boost::tree_node::in_order_iterator<Node const> in_itr(node);
+
+    test_node(node, bf_vals, pre_vals, post_vals, df_vals);
+    BOOST_CHECK(test_iterators(in_itr, in_vals.begin(), in_vals.end()));
+}
+
+template <typename TreeItr, typename Itr>
+bool test_associative_iterators(TreeItr tree_itr, Itr itr, Itr itr_end)
+{
+    while (tree_itr)
+    {
+        if (itr == itr_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(tree_itr->first == boost::get<0>(*itr));
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::data_key()
+            ) == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::height_key()
+            ) == boost::get<2>(*itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(tree_itr)
+              , boost::tree_node::count_key()
+            ) == boost::get<3>(*itr)
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<4>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<5>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<6>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<7>(*itr)
+        );
+#endif
+        test_children(boost::tree_node::dereference_iterator(tree_itr));
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+    return true;
+}
+
+template <typename DFItr, typename TupleItr>
+bool test_df_assoc_iterator(DFItr df_itr, TupleItr t_itr, TupleItr t_end)
+{
+    while (df_itr)
+    {
+        if (t_itr == t_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == boost::get<0>(*t_itr)
+        );
+        BOOST_CHECK(df_itr->first == boost::get<1>(*t_itr));
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::data_key()
+            ) == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::height_key()
+            ) == boost::get<3>(*t_itr)
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(df_itr)
+              , boost::tree_node::count_key()
+            ) == boost::get<4>(*t_itr)
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<5>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<6>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<7>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<8>(*t_itr)
+        );
+#endif
+        test_children(boost::tree_node::dereference_iterator(df_itr));
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+    return true;
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename KeyValues
+  , typename DFValues
+  , typename DFKeyValues
+>
+void
+    test_associative_node(
+        Node const& node
+      , Values const& bf_vals
+      , KeyValues const& bf_kvs
+      , Values const& pre_vals
+      , KeyValues const& pre_kvs
+      , Values const& post_vals
+      , KeyValues const& post_kvs
+      , DFValues const& df_vals
+      , DFKeyValues const& df_kvs
+    )
+{
+    boost::tree_node::breadth_first_iterator<Node const> bf_itr(node);
+    boost::tree_node::breadth_first_descendant_iterator<Node const> bf_d_itr(
+        node
+    );
+    boost::tree_node::pre_order_iterator<Node const> pre_itr(node);
+    boost::tree_node::pre_order_descendant_iterator<Node const> pre_d_itr(
+        node
+    );
+    boost::tree_node::post_order_iterator<Node const> post_itr(node);
+    boost::tree_node::post_order_descendant_iterator<Node const> post_d_itr(
+        node
+    );
+    boost::tree_node::depth_first_iterator<Node const> df_itr(node);
+    boost::tree_node::depth_first_descendant_iterator<Node const> df_d_itr(
+        node
+    );
+
+    BOOST_CHECK(test_iterators(bf_itr, bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(
+        test_associative_iterators(bf_d_itr, bf_kvs.begin(), bf_kvs.end())
+    );
+    BOOST_CHECK(test_iterators(pre_itr, pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(
+        test_associative_iterators(pre_d_itr, pre_kvs.begin(), pre_kvs.end())
+    );
+    BOOST_CHECK(test_iterators(post_itr, post_vals.begin(), post_vals.end()));
+    BOOST_CHECK(
+        test_associative_iterators(
+            post_d_itr
+          , post_kvs.begin()
+          , post_kvs.end()
+        )
+    );
+    BOOST_CHECK(test_df_iterator(df_itr, df_vals.begin(), df_vals.end()));
+    BOOST_CHECK(
+        test_df_assoc_iterator(df_d_itr, df_kvs.begin(), df_kvs.end())
+    );
+}
+
+template <typename Itr1, typename Itr2>
+bool test_node_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        if (
+            boost::tree_node::traversal_state(
+                itr2
+            ) == boost::tree_node::no_traversal
+        )
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::data_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::data_key()
+            )
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::height_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::height_key()
+            )
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::count_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::count_key()
+            )
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+#endif
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(
+            itr2
+        ) == boost::tree_node::no_traversal
+    );
+    return true;
+}
+
+template <typename Itr1, typename Itr2>
+bool test_associative_node_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        if (
+            boost::tree_node::traversal_state(
+                itr2
+            ) == boost::tree_node::no_traversal
+        )
+        {
+            return false;
+        }
+
+        BOOST_CHECK(itr1->first == itr2->first);
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::data_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::data_key()
+            )
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::height_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::height_key()
+            )
+        );
+        BOOST_CHECK(
+            get(
+                boost::tree_node::dereference_iterator(itr1)
+              , boost::tree_node::count_key()
+            ) == get(
+                boost::tree_node::dereference_iterator(itr2)
+              , boost::tree_node::count_key()
+            )
+        );
+#if !defined BOOST_NO_SFINAE
+        BOOST_CHECK(
+            boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<boost::tree_node::accumulation_key<> >(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuHeightKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuCountKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(itr1)
+            ) == boost::tree_node::get<AccuAccuKey>(
+                boost::tree_node::dereference_iterator(itr2)
+            )
+        );
+#endif
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(
+            itr2
+        ) == boost::tree_node::no_traversal
+    );
+    return true;
+}
+
+template <typename TreeItr, typename Itr>
+bool test_f_iters(TreeItr tree_itr, Itr itr, Itr itr_end)
+{
+    while (tree_itr)
+    {
+        if (itr == itr_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<0>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_char>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuYourUintKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<2>(*itr)
+        );
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+    return true;
+}
+
+template <typename DFItr, typename TupleItr>
+bool test_f_df_iter(DFItr df_itr, TupleItr t_itr, TupleItr t_end)
+{
+    while (df_itr)
+    {
+        if (t_itr == t_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == boost::get<0>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<1>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_char>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuYourUintKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<3>(*t_itr)
+        );
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+    return true;
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+>
+void
+    test_f_node(
+        Node const& node
+      , Values const& bf_vals
+      , Values const& pre_vals
+      , Values const& post_vals
+      , DFValues const& df_vals
+    )
+{
+    boost::tree_node::breadth_first_iterator<Node const> bf_itr(node);
+    boost::tree_node::breadth_first_descendant_iterator<Node const> bf_d_itr(
+        node
+    );
+    boost::tree_node::pre_order_iterator<Node const> pre_itr(node);
+    boost::tree_node::pre_order_descendant_iterator<Node const> pre_d_itr(
+        node
+    );
+    boost::tree_node::post_order_iterator<Node const> post_itr(node);
+    boost::tree_node::post_order_descendant_iterator<Node const> post_d_itr(
+        node
+    );
+    boost::tree_node::depth_first_iterator<Node const> df_itr(node);
+    boost::tree_node::depth_first_descendant_iterator<Node const> df_d_itr(
+        node
+    );
+    Values p_d_vals(post_vals);
+    DFValues df_d_vals(df_vals);
+
+    BOOST_CHECK(test_f_iters(bf_itr, bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(test_f_iters(bf_d_itr, ++bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(test_f_iters(pre_itr, pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(test_f_iters(pre_d_itr, ++pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(test_f_iters(post_itr, post_vals.begin(), post_vals.end()));
+    p_d_vals.pop_back();
+    BOOST_CHECK(test_f_iters(post_d_itr, p_d_vals.begin(), p_d_vals.end()));
+    BOOST_CHECK(test_f_df_iter(df_itr, df_vals.begin(), df_vals.end()));
+    df_d_vals.pop_front();
+    df_d_vals.pop_back();
+    BOOST_CHECK(test_f_df_iter(df_d_itr, df_d_vals.begin(), df_d_vals.end()));
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+>
+void
+    test_f_node(
+        Node const& node
+      , Values const& bf_vals
+      , Values const& pre_vals
+      , Values const& post_vals
+      , Values const& in_vals
+      , DFValues const& df_vals
+    )
+{
+    boost::tree_node::in_order_iterator<Node const> in_itr(node);
+
+    test_f_node(node, bf_vals, pre_vals, post_vals, df_vals);
+    BOOST_CHECK(test_f_iters(in_itr, in_vals.begin(), in_vals.end()));
+}
+
+template <typename TreeItr, typename Itr>
+bool test_f_associative_iters(TreeItr tree_itr, Itr itr, Itr itr_end)
+{
+    while (tree_itr)
+    {
+        if (itr == itr_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(tree_itr->first == boost::get<0>(*itr));
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_char>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<2>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuYourUintKey>(
+                boost::tree_node::dereference_iterator(tree_itr)
+            ) == boost::get<3>(*itr)
+        );
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+    return true;
+}
+
+template <typename DFItr, typename TupleItr>
+bool test_f_df_assoc_iter(DFItr df_itr, TupleItr t_itr, TupleItr t_end)
+{
+    while (df_itr)
+    {
+        if (t_itr == t_end)
+        {
+            return false;
+        }
+
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == boost::get<0>(*t_itr)
+        );
+        BOOST_CHECK(df_itr->first == boost::get<1>(*t_itr));
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_uint>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<example_keys::your_char>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<3>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::get<AccuYourUintKey>(
+                boost::tree_node::dereference_iterator(df_itr)
+            ) == boost::get<4>(*t_itr)
+        );
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+    return true;
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename KeyValues
+  , typename DFValues
+  , typename DFKeyValues
+>
+void
+    test_f_associative_node(
+        Node const& node
+      , Values const& bf_vals
+      , KeyValues const& bf_kvs
+      , Values const& pre_vals
+      , KeyValues const& pre_kvs
+      , Values const& post_vals
+      , KeyValues const& post_kvs
+      , DFValues const& df_vals
+      , DFKeyValues const& df_kvs
+    )
+{
+    boost::tree_node::breadth_first_iterator<Node const> bf_itr(node);
+    boost::tree_node::breadth_first_descendant_iterator<Node const> bf_d_itr(
+        node
+    );
+    boost::tree_node::pre_order_iterator<Node const> pre_itr(node);
+    boost::tree_node::pre_order_descendant_iterator<Node const> pre_d_itr(
+        node
+    );
+    boost::tree_node::post_order_iterator<Node const> post_itr(node);
+    boost::tree_node::post_order_descendant_iterator<Node const> post_d_itr(
+        node
+    );
+    boost::tree_node::depth_first_iterator<Node const> df_itr(node);
+    boost::tree_node::depth_first_descendant_iterator<Node const> df_d_itr(
+        node
+    );
+
+    BOOST_CHECK(test_f_iters(bf_itr, bf_vals.begin(), bf_vals.end()));
+    BOOST_CHECK(
+        test_f_associative_iters(bf_d_itr, bf_kvs.begin(), bf_kvs.end())
+    );
+    BOOST_CHECK(test_f_iters(pre_itr, pre_vals.begin(), pre_vals.end()));
+    BOOST_CHECK(
+        test_f_associative_iters(pre_d_itr, pre_kvs.begin(), pre_kvs.end())
+    );
+    BOOST_CHECK(test_f_iters(post_itr, post_vals.begin(), post_vals.end()));
+    BOOST_CHECK(
+        test_f_associative_iters(post_d_itr, post_kvs.begin(), post_kvs.end())
+    );
+    BOOST_CHECK(test_f_df_iter(df_itr, df_vals.begin(), df_vals.end()));
+    BOOST_CHECK(test_f_df_assoc_iter(df_d_itr, df_kvs.begin(), df_kvs.end()));
+}
+
+#endif  // LIBS_TREE_NODE_TEST_ITERATOR_FUNCTIONS_HPP_INCLUDED
+
Added: sandbox/tree_node/libs/tree_node/test/nary_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/test/nary_node.cpp	2012-12-20 22:42:25 EST (Thu, 20 Dec 2012)
@@ -0,0 +1,1753 @@
+// Copyright (C) 2012 Cromwell D. Enage
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//#define BOOST_TYPEOF_COMPLIANT
+
+#include <boost/config.hpp>
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
+#include <iterator>
+#include <boost/typeof/typeof.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/utility/get_reference.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/typeof/with_count.hpp>
+#include <boost/tree_node/typeof/with_height.hpp>
+#include <boost/tree_node/typeof/with_position.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tree_node/typeof/with_accumulation.hpp>
+#endif
+
+#include "../example/type_definitions.hpp"
+#include "iterator_functions.hpp"
+
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        DFEmplacer;
+
+#include <boost/tree_node/typeof/nary_node.hpp>
+
+template <typename Selector>
+void test()
+{
+#if defined BOOST_NO_SFINAE
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::with_count_gen<
+                        boost::tree_node::nary_node_gen<Selector>
+                    >
+                >
+              , double
+            >
+            ANode;
+#else
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::with_height_gen<
+                    boost::tree_node::with_accumulation_gen<
+                        boost::tree_node::with_position_gen<
+                            boost::tree_node::with_accumulation_gen<
+                                boost::tree_node::with_count_gen<
+                                    boost::tree_node::with_accumulation_gen<
+                                        boost::tree_node::nary_node_gen<
+                                            Selector
+                                        >
+                                    >
+                                >
+                              , AccuAccuKey
+                            >
+                        >
+                      , AccuCountKey
+                    >
+                >
+              , double
+              , void
+              , AccuHeightKey
+            >
+            ANode;
+#endif
+
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            Values;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::data_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::height_key()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        get(
+                            boost::get_reference<ANode const>()
+                          , boost::tree_node::count_key()
+                        )
+                    )
+#if !defined BOOST_NO_SFINAE
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            boost::tree_node::accumulation_key<>
+                        >(boost::get_reference<ANode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuHeightKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuCountKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuAccuKey>(
+                            boost::get_reference<ANode const>()
+                        )
+                    )
+#endif  // BOOST_NO_SFINAE
+                >
+            >::type
+            DFValues;
+
+    ANode a_root(5.0);
+
+    BOOST_CHECK(
+        !a_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO(data, get(*itr, boost::tree_node::data_key()));
+
+        if (1 < data)
+        {
+            for (std::size_t i = 0; i < data; ++i)
+            {
+                typename ANode::iterator child_itr(
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+                    (std::tr1::is_same<Selector,boost::slistS>::value) ? (
+                        (*itr).emplace(data - 1 - i)
+                    ) :
+#endif
+                    (*itr).emplace(i)
+                );
+                typename ANode::const_pointer const_child(&*child_itr);
+                BOOST_CHECK(
+                    (*child_itr).get_parent_ptr() == &*itr
+//                  , "Ctor not linking child to parent."
+                );
+                BOOST_CHECK(
+                    (
+                        (*child_itr).get_parent_ptr()
+                    ) == (*const_child).get_parent_ptr()
+//                  , "Why are these pointers different?"
+                );
+
+                {
+                    typename ANode::iterator c_itr = (*itr).begin();
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+                    if (!std::tr1::is_same<Selector,boost::slistS>::value)
+#endif
+                    std::advance(c_itr, i);
+                    BOOST_CHECK(
+                        &*child_itr == &*c_itr
+//                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        Values bf_vals, pre_vals, post_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 3, 12)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 12)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(4, 3, 12)(5, 4, 24);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 24)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::post_order_traversal, 4, 3, 12)
+            (boost::tree_node::post_order_traversal, 5, 4, 24);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(5, 4, 24, 31, 3, 76, 3);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+          (boost::tree_node::post_order_traversal, 5, 4, 24, 31, 3, 76, 3);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, df_vals);
+    }
+
+    {
+        ANode a_copy(a_root);
+        boost::tree_node::breadth_first_iterator<ANode const>
+            bf_root_itr(a_root), bf_copy_itr(a_copy);
+        boost::tree_node::breadth_first_descendant_iterator<ANode const>
+            bf_d_root_itr(a_root), bf_d_copy_itr(a_copy);
+        boost::tree_node::pre_order_iterator<ANode const>
+            pre_root_itr(a_root), pre_copy_itr(a_copy);
+        boost::tree_node::pre_order_descendant_iterator<ANode const>
+            pre_d_root_itr(a_root), pre_d_copy_itr(a_copy);
+        boost::tree_node::post_order_iterator<ANode const>
+            post_root_itr(a_root), post_copy_itr(a_copy);
+        boost::tree_node::post_order_descendant_iterator<ANode const>
+            post_d_root_itr(a_root), post_d_copy_itr(a_copy);
+        boost::tree_node::depth_first_iterator<ANode const>
+            df_root_itr(a_root), df_copy_itr(a_copy);
+        boost::tree_node::depth_first_descendant_iterator<ANode const>
+            df_d_root_itr(a_root), df_d_copy_itr(a_copy);
+
+        BOOST_CHECK(test_node_copies(bf_root_itr, bf_copy_itr));
+        BOOST_CHECK(test_node_copies(bf_d_root_itr, bf_d_copy_itr));
+        BOOST_CHECK(test_node_copies(pre_root_itr, pre_copy_itr));
+        BOOST_CHECK(test_node_copies(pre_d_root_itr, pre_d_copy_itr));
+        BOOST_CHECK(test_node_copies(post_root_itr, post_copy_itr));
+        BOOST_CHECK(test_node_copies(post_d_root_itr, post_d_copy_itr));
+        BOOST_CHECK(test_node_copies(df_root_itr, df_copy_itr));
+        BOOST_CHECK(test_node_copies(df_d_root_itr, df_d_copy_itr));
+    }
+
+    {
+        typename ANode::iterator a_child_itr(
+            (*(++a_root.begin())).insert(a_root)
+        );
+        Values bf_vals, pre_vals, post_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 48)(0, 0, 1)(1, 5, 25)(2, 1, 3)(3, 2, 6)(4, 3, 12)(5, 4, 24)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 3, 12)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 48)(0, 0, 1)(1, 5, 25)(5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(4, 3, 12)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(4, 3, 12)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(3, 2, 6)(4, 3, 12)(5, 4, 24)(1, 5, 25)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 3, 12)(5, 6, 48);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 48)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 5, 25)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 24)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::post_order_traversal, 4, 3, 12)
+                    (boost::tree_node::post_order_traversal, 5, 4, 24)
+                (boost::tree_node::post_order_traversal, 1, 5, 25)
+                (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::post_order_traversal, 4, 3, 12)
+            (boost::tree_node::post_order_traversal, 5, 6, 48);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 48, 62, 5, 200, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 5, 25, 32, 4, 101, 4)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 6, 48, 62, 5, 200, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 5, 25, 32, 4, 101, 4)(5, 4, 24, 31, 3, 76, 3)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 12, 15, 2, 32, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (5, 4, 24, 31, 3, 76, 3)(1, 5, 25, 32, 4, 101, 4)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(5, 6, 48, 62, 5, 200, 4);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 48, 62, 5, 200, 4)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 5, 25, 32, 4, 101, 4)
+              (boost::tree_node::pre_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::post_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+            (boost::tree_node::post_order_traversal, 1, 5, 25, 32, 4, 101, 4)
+            (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+          (boost::tree_node::post_order_traversal, 5, 6, 48, 62, 5, 200, 4);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, df_vals);
+
+        a_root = *a_child_itr;
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        df_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 3, 12)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 12)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(4, 3, 12)(5, 4, 24);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 4, 24)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::post_order_traversal, 4, 3, 12)
+            (boost::tree_node::post_order_traversal, 5, 4, 24);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(5, 4, 24, 31, 3, 76, 3);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+          (boost::tree_node::post_order_traversal, 5, 4, 24, 31, 3, 76, 3);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, df_vals);
+
+        a_child_itr = a_root.begin();
+        std::advance(a_child_itr, 4);
+        a_child_itr = (*a_child_itr).begin();
+        *a_child_itr = a_root;
+        test_node(*a_child_itr, bf_vals, pre_vals, post_vals, df_vals);
+
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        df_vals.clear();
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 47)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 5, 35)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(5, 4, 24)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)
+            (4, 3, 12)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 47)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 5, 35)(5, 4, 24)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 12)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 3, 12)(5, 4, 24)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 5, 35)(5, 6, 47);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 47)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::pre_order_traversal, 4, 5, 35)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 24)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::post_order_traversal, 4, 3, 12)
+                    (boost::tree_node::post_order_traversal, 5, 4, 24)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::post_order_traversal, 4, 5, 35)
+            (boost::tree_node::post_order_traversal, 5, 6, 47);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 47, 62, 5, 197, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 5, 35, 46, 4, 130, 4)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(5, 4, 24, 31, 3, 76, 3)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 6, 47, 62, 5, 197, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 5, 35, 46, 4, 130, 4)(5, 4, 24, 31, 3, 76, 3)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(4, 3, 12, 15, 2, 32, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 3, 12, 15, 2, 32, 2)
+            (5, 4, 24, 31, 3, 76, 3)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(4, 5, 35, 46, 4, 130, 4)
+            (5, 6, 47, 62, 5, 197, 4);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 47, 62, 5, 197, 4)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::pre_order_traversal, 4, 5, 35, 46, 4, 130, 4)
+              (boost::tree_node::pre_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::post_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::post_order_traversal, 4, 5, 35, 46, 4, 130, 4)
+          (boost::tree_node::post_order_traversal, 5, 6, 47, 62, 5, 197, 4);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, df_vals);
+    }
+
+    {
+        typename ANode::iterator a_child_itr(a_root.begin());
+
+        std::advance(a_child_itr, 3);
+        (*a_child_itr).clear();
+
+        Values bf_vals, pre_vals, post_vals;
+        DFValues df_vals;
+        DFEmplacer emplacer;
+
+#if defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 42)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 0, 1)(4, 5, 35)(0, 0, 1)
+            (1, 0, 1)(5, 4, 24)(1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(3, 2, 6)(4, 3, 12)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[pre_vals]
+            (5, 6, 42)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 0, 1)
+            (4, 5, 35)(5, 4, 24)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)
+            (3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(4, 3, 12)
+            (0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(3, 2, 6)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(3, 2, 6)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1);
+        emplacer[post_vals]
+            (0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 0, 1)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)
+            (1, 0, 1)(2, 1, 3)(3, 2, 6)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)
+            (2, 1, 3)(0, 0, 1)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)
+            (4, 3, 12)(5, 4, 24)(1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(0, 0, 1)
+            (1, 0, 1)(0, 0, 1)(1, 0, 1)(2, 1, 3)(3, 2, 6)(4, 5, 35)(5, 6, 42);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, 6, 42)
+                (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                (boost::tree_node::post_order_traversal, 0, 0, 1)
+                (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                    (boost::tree_node::post_order_traversal, 0, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                (boost::tree_node::post_order_traversal, 2, 1, 3)
+                (boost::tree_node::pre_order_traversal, 3, 0, 1)
+                (boost::tree_node::post_order_traversal, 3, 0, 1)
+                (boost::tree_node::pre_order_traversal, 4, 5, 35)
+                    (boost::tree_node::pre_order_traversal, 5, 4, 24)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                        (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 4, 3, 12)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 2, 1, 3)
+                            (boost::tree_node::post_order_traversal, 3, 2, 6)
+                        (boost::tree_node::post_order_traversal, 4, 3, 12)
+                    (boost::tree_node::post_order_traversal, 5, 4, 24)
+                    (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                    (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::pre_order_traversal, 3, 2, 6)
+                        (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                        (boost::tree_node::post_order_traversal, 0, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::pre_order_traversal, 2, 1, 3)
+                            (boost::tree_node::pre_order_traversal, 0, 0, 1)
+                            (boost::tree_node::post_order_traversal, 0, 0, 1)
+                            (boost::tree_node::pre_order_traversal, 1, 0, 1)
+                            (boost::tree_node::post_order_traversal, 1, 0, 1)
+                        (boost::tree_node::post_order_traversal, 2, 1, 3)
+                    (boost::tree_node::post_order_traversal, 3, 2, 6)
+                (boost::tree_node::post_order_traversal, 4, 5, 35)
+            (boost::tree_node::post_order_traversal, 5, 6, 42);
+#else  // !defined BOOST_NO_SFINAE
+        emplacer[bf_vals]
+            (5, 6, 42, 58, 5, 180, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 0, 1, 3, 0, 1, 3)(4, 5, 35, 46, 4, 130, 4)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (5, 4, 24, 31, 3, 76, 3)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[pre_vals]
+            (5, 6, 42, 58, 5, 180, 4)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 0, 1, 3, 0, 1, 3)(4, 5, 35, 46, 4, 130, 4)
+            (5, 4, 24, 31, 3, 76, 3)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (4, 3, 12, 15, 2, 32, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1);
+        emplacer[post_vals]
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 0, 1, 3, 0, 1, 3)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (3, 2, 6, 7, 1, 13, 2)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 3, 12, 15, 2, 32, 2)(5, 4, 24, 31, 3, 76, 3)
+            (1, 0, 1, 1, 0, 1, 1)(0, 0, 1, 0, 0, 1, 0)
+            (1, 0, 1, 1, 0, 1, 1)(2, 1, 3, 3, 0, 5, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (0, 0, 1, 0, 0, 1, 0)(1, 0, 1, 1, 0, 1, 1)
+            (2, 1, 3, 3, 0, 5, 1)(3, 2, 6, 7, 1, 13, 2)
+            (4, 5, 35, 46, 4, 130, 4)(5, 6, 42, 58, 5, 180, 4);
+        emplacer[df_vals]
+          (boost::tree_node::pre_order_traversal, 5, 6, 42, 58, 5, 180, 4)
+            (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+            (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+            (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+            (boost::tree_node::pre_order_traversal, 3, 0, 1, 3, 0, 1, 3)
+            (boost::tree_node::post_order_traversal, 3, 0, 1, 3, 0, 1, 3)
+            (boost::tree_node::pre_order_traversal, 4, 5, 35, 46, 4, 130, 4)
+              (boost::tree_node::pre_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::post_order_traversal, 4, 3, 12, 15, 2, 32, 2)
+              (boost::tree_node::post_order_traversal, 5, 4, 24, 31, 3, 76, 3)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::pre_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::pre_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::post_order_traversal, 0, 0, 1, 0, 0, 1, 0)
+              (boost::tree_node::pre_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 1, 0, 1, 1, 0, 1, 1)
+              (boost::tree_node::post_order_traversal, 2, 1, 3, 3, 0, 5, 1)
+              (boost::tree_node::post_order_traversal, 3, 2, 6, 7, 1, 13, 2)
+            (boost::tree_node::post_order_traversal, 4, 5, 35, 46, 4, 130, 4)
+          (boost::tree_node::post_order_traversal, 5, 6, 42, 58, 5, 180, 4);
+#endif  // BOOST_NO_SFINAE
+        test_node(a_root, bf_vals, pre_vals, post_vals, df_vals);
+    }
+
+#if defined BOOST_TREE_NODE_CAN_USE_FUSION
+    typedef boost::tree_node::with_accumulation<
+                boost::tree_node::nary_node_gen<Selector>
+              , DataMap
+              , void
+              , AccuYourUintKey
+            >
+            FNode;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            MoreValues;
+    typedef typename boost::container_gen<
+                boost::dequeS
+              , boost::tuples::tuple<
+                    boost::tree_node::traversal_state
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_uint
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<
+                            example_keys::your_char
+                        >(boost::get_reference<FNode const>())
+                    )
+                  , BOOST_TYPEOF_TPL(
+                        boost::tree_node::get<AccuYourUintKey>(
+                            boost::get_reference<FNode const>()
+                        )
+                    )
+                >
+            >::type
+            DFMoreValues;
+
+    FNode f_root(
+        boost::fusion::make_pair<example_keys::your_uint>(5)
+      , boost::fusion::make_pair<example_keys::your_char>('5')
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<FNode> itr(f_root);
+        itr;
+        ++itr
+    )
+    {
+        BOOST_AUTO_TPL(
+            data
+          , boost::tree_node::get<example_keys::your_uint>(*itr)
+        );
+
+        if (1 < data)
+        {
+            for (unsigned int i = 0; i < data; ++i)
+            {
+                if (std::tr1::is_same<Selector,boost::slistS>::value)
+                {
+                    (*itr).emplace(
+                        boost::fusion::make_pair<example_keys::your_uint>(
+                            data - 1 - i
+                        )
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + data - 1 - i
+                        )
+                    );
+                }
+                else
+                {
+                    (*itr).emplace(
+                        boost::fusion::make_pair<example_keys::your_uint>(i)
+                      , boost::fusion::make_pair<example_keys::your_char>(
+                            '0' + i
+                        )
+                    );
+                }
+            }
+
+        }
+    }
+
+    {
+        MoreValues bf_vals, pre_vals, post_vals;
+        DFMoreValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            (5, '5', 31)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 7)
+            (4, '4', 15)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 7)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[pre_vals]
+            (5, '5', 31)(0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(3, '3', 7)(0, '0', 0)(1, '1', 1)(2, '2', 3)
+            (0, '0', 0)(1, '1', 1)(4, '4', 15)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(3, '3', 7)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[post_vals]
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(2, '2', 3)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(2, '2', 3)
+            (3, '3', 7)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(3, '3', 7)(4, '4', 15)(5, '5', 31);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, '5', 31)
+                (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                (boost::tree_node::post_order_traversal, 0, '0', 0)
+                (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                (boost::tree_node::post_order_traversal, 1, '1', 1)
+                (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                (boost::tree_node::post_order_traversal, 2, '2', 3)
+                (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::pre_order_traversal, 4, '4', 15)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                            (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                            (boost::tree_node::post_order_traversal, 0, '0', 0)
+                            (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                            (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::post_order_traversal, 4, '4', 15)
+            (boost::tree_node::post_order_traversal, 5, '5', 31);
+        test_f_node(f_root, bf_vals, pre_vals, post_vals, df_vals);
+
+        typename FNode::iterator f_child_itr(f_root.begin());
+
+        std::advance(f_child_itr, 3);
+        f_child_itr = (*f_child_itr).begin();
+        std::advance(f_child_itr, 2);
+        boost::tree_node::put(*f_child_itr, example_keys::your_uint(), 7);
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        df_vals.clear();
+
+        emplacer[bf_vals]
+            (5, '5', 36)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 12)
+            (4, '4', 15)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (7, '2', 8)(0, '0', 0)(1, '1', 1)(2, '2', 3)(3, '3', 7)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[pre_vals]
+            (5, '5', 36)(0, '0', 0)(1, '1', 1)(2, '2', 3)(0, '0', 0)
+            (1, '1', 1)(3, '3', 12)(0, '0', 0)(1, '1', 1)(7, '2', 8)
+            (0, '0', 0)(1, '1', 1)(4, '4', 15)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(3, '3', 7)(0, '0', 0)
+            (1, '1', 1)(2, '2', 3)(0, '0', 0)(1, '1', 1);
+        emplacer[post_vals]
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(2, '2', 3)
+            (0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)(7, '2', 8)
+            (3, '3', 12)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(0, '0', 0)(1, '1', 1)(0, '0', 0)(1, '1', 1)
+            (2, '2', 3)(3, '3', 7)(4, '4', 15)(5, '5', 36);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, 5, '5', 36)
+                (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                (boost::tree_node::post_order_traversal, 0, '0', 0)
+                (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                (boost::tree_node::post_order_traversal, 1, '1', 1)
+                (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                (boost::tree_node::post_order_traversal, 2, '2', 3)
+                (boost::tree_node::pre_order_traversal, 3, '3', 12)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 7, '2', 8)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 7, '2', 8)
+                (boost::tree_node::post_order_traversal, 3, '3', 12)
+                (boost::tree_node::pre_order_traversal, 4, '4', 15)
+                    (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                    (boost::tree_node::post_order_traversal, 0, '0', 0)
+                    (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                    (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::pre_order_traversal, 3, '3', 7)
+                        (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                        (boost::tree_node::post_order_traversal, 0, '0', 0)
+                        (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::pre_order_traversal, 2, '2', 3)
+                            (boost::tree_node::pre_order_traversal, 0, '0', 0)
+                            (boost::tree_node::post_order_traversal, 0, '0', 0)
+                            (boost::tree_node::pre_order_traversal, 1, '1', 1)
+                            (boost::tree_node::post_order_traversal, 1, '1', 1)
+                        (boost::tree_node::post_order_traversal, 2, '2', 3)
+                    (boost::tree_node::post_order_traversal, 3, '3', 7)
+                (boost::tree_node::post_order_traversal, 4, '4', 15)
+            (boost::tree_node::post_order_traversal, 5, '5', 36);
+        test_f_node(f_root, bf_vals, pre_vals, post_vals, df_vals);
+    }
+#endif  // BOOST_TREE_NODE_CAN_USE_FUSION
+}
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/boost/ptr_container/ptr_vector.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_deque.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_list.hpp>
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/container/vector.hpp>
+#include <boost/typeof/boost/container/stable_vector.hpp>
+#include <boost/typeof/boost/container/deque.hpp>
+#include <boost/typeof/boost/container/list.hpp>
+#include <boost/typeof/boost/container/slist.hpp>
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif  // BOOST_TYPEOF_EMULATION
+
+int test_main(int argc, char** argv)
+{
+    test<boost::ptr_vecS>();
+    test<boost::ptr_dequeS>();
+    test<boost::ptr_listS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test<boost::vector_selector<boost::mpl::true_> >();
+    test<boost::stable_vecS>();
+    test<boost::deque_selector<boost::mpl::true_> >();
+    test<boost::list_selector<boost::mpl::true_> >();
+    test<boost::slistS>();
+#endif
+
+    return 0;
+}
+