$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r80441 - in sandbox: container_gen container_gen/boost container_gen/boost/container_gen container_gen/boost/detail container_gen/boost/detail/function container_gen/boost/detail/metafunction container_gen/boost/graph container_gen/boost/graph/detail container_gen/boost/graph/detail/metafunction container_gen/boost/pending container_gen/boost/typeof container_gen/boost/typeof/boost container_gen/boost/typeof/boost/container container_gen/boost/typeof/boost/functional container_gen/boost/typeof/boost/iterator container_gen/boost/typeof/boost/mpl container_gen/boost/typeof/boost/ptr_container container_gen/boost/typeof/boost/ptr_container/detail container_gen/boost/typeof/boost/unordered container_gen/boost/typeof/boost/utility container_gen/boost/typeof/std container_gen/boost/typeof/std/tr1 container_gen/boost/utility container_gen/libs container_gen/libs/container_gen container_gen/libs/container_gen/doc container_gen/libs/container_gen/doc/html container_gen/libs/container_gen/doc/html/container_gen container_gen/libs/container_gen/doc/html/container_gen/reference container_gen/libs/container_gen/example container_gen/libs/container_gen/test container_gen/libs/graph container_gen/libs/graph/example container_gen/libs/utility container_gen/libs/utility/doc container_gen/libs/utility/doc/html container_gen/libs/utility/doc/src container_gen/libs/utility/doc/src/get_iterator_second container_gen/libs/utility/doc/src/get_iterator_value_second tree_node tree_node/boost tree_node/boost/detail tree_node/boost/detail/metafunction tree_node/boost/tree_node tree_node/boost/tree_node/_detail tree_node/boost/tree_node/algorithm tree_node/boost/tree_node/typeof tree_node/libs tree_node/libs/tree_node tree_node/libs/tree_node/doc tree_node/libs/tree_node/doc/html tree_node/libs/tree_node/doc/html/tree_node tree_node/libs/tree_node/doc/html/tree_node/concepts tree_node/libs/tree_node/doc/html/tree_node/reference tree_node/libs/tree_node/example tree_node/libs/tree_node/test
From: sponage_at_[hidden]
Date: 2012-09-08 04:50:22
Author: expaler
Date: 2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
New Revision: 80441
URL: http://svn.boost.org/trac/boost/changeset/80441
Log:
Added Boost.ContainerGen (formerly Boost.Utility.ContainerGen); re-added Boost.TreeNode
Added:
   sandbox/container_gen/
   sandbox/container_gen/LICENSE_1_0.txt   (contents, props changed)
   sandbox/container_gen/boost/
   sandbox/container_gen/boost.png   (contents, props changed)
   sandbox/container_gen/boost/container_gen/
   sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_typeof.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/container_gen.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_associative_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/selectors.hpp   (contents, props changed)
   sandbox/container_gen/boost/container_gen/selectors_typeof.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/
   sandbox/container_gen/boost/detail/function/
   sandbox/container_gen/boost/detail/function/get_reference.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/function/range_equal.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/function/range_less.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/
   sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_reference.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp   (contents, props changed)
   sandbox/container_gen/boost/graph/
   sandbox/container_gen/boost/graph/adjacency_list.hpp   (contents, props changed)
   sandbox/container_gen/boost/graph/detail/
   sandbox/container_gen/boost/graph/detail/adjacency_list.hpp   (contents, props changed)
   sandbox/container_gen/boost/graph/detail/metafunction/
   sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp   (contents, props changed)
   sandbox/container_gen/boost/pending/
   sandbox/container_gen/boost/pending/container_traits.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/
   sandbox/container_gen/boost/typeof/boost/
   sandbox/container_gen/boost/typeof/boost/array.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/
   sandbox/container_gen/boost/typeof/boost/container/allocator_traits.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/deque.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/flat_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/flat_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/list.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/slist.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/stable_vector.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/string.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/container/vector.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/function.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/function_output_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/functional/
   sandbox/container_gen/boost/typeof/boost/functional/hash.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/
   sandbox/container_gen/boost/typeof/boost/iterator/counting_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/filter_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/indirect_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/iterator_adaptor.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/iterator_facade.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/permutation_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/reverse_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/transform_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/iterator/zip_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/
   sandbox/container_gen/boost/typeof/boost/mpl/bool.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/char.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/int.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/long.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/mpl/size_t.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/optional.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/
   sandbox/container_gen/boost/typeof/boost/ptr_container/clone_allocator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_array.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_deque.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_list.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_vector.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/ref.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/shared_container_iterator.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/unordered/
   sandbox/container_gen/boost/typeof/boost/unordered/unordered_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/unordered/unordered_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/boost/utility/
   sandbox/container_gen/boost/typeof/boost/utility/result_of.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/
   sandbox/container_gen/boost/typeof/std/hash_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/hash_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/slist.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/
   sandbox/container_gen/boost/typeof/std/tr1/array.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/functional.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/unordered_map.hpp   (contents, props changed)
   sandbox/container_gen/boost/typeof/std/tr1/unordered_set.hpp   (contents, props changed)
   sandbox/container_gen/boost/utility/
   sandbox/container_gen/boost/utility/get_iterator_second.hpp   (contents, props changed)
   sandbox/container_gen/boost/utility/get_iterator_value_second.hpp   (contents, props changed)
   sandbox/container_gen/libs/
   sandbox/container_gen/libs/container_gen/
   sandbox/container_gen/libs/container_gen/doc/
   sandbox/container_gen/libs/container_gen/doc/Jamroot   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/changelog.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/container_gen.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/index.html   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/reference.qbk   (contents, props changed)
   sandbox/container_gen/libs/container_gen/example/
   sandbox/container_gen/libs/container_gen/example/output_char_tallies.cpp   (contents, props changed)
   sandbox/container_gen/libs/container_gen/example/output_shape_stats.cpp   (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/
   sandbox/container_gen/libs/container_gen/test/emplace_assoc_function_gen.cpp   (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/emplace_function_gen.cpp   (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/selectors.cpp   (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/type_definitions.hpp   (contents, props changed)
   sandbox/container_gen/libs/graph/
   sandbox/container_gen/libs/graph/example/
   sandbox/container_gen/libs/graph/example/container_gen.cpp   (contents, props changed)
   sandbox/container_gen/libs/graph/example/container_gen.expected   (contents, props changed)
   sandbox/container_gen/libs/utility/
   sandbox/container_gen/libs/utility/doc/
   sandbox/container_gen/libs/utility/doc/html/
   sandbox/container_gen/libs/utility/doc/html/get_iterator_second.html   (contents, props changed)
   sandbox/container_gen/libs/utility/doc/html/get_iterator_value_second.html   (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/Jamroot   (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_second/doc.qbk   (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/Jamroot   (contents, props changed)
   sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/doc.qbk   (contents, props changed)
   sandbox/tree_node/
   sandbox/tree_node/LICENSE_1_0.txt   (contents, props changed)
   sandbox/tree_node/boost/
   sandbox/tree_node/boost.png   (contents, props changed)
   sandbox/tree_node/boost/detail/
   sandbox/tree_node/boost/detail/base_pointee.hpp   (contents, props changed)
   sandbox/tree_node/boost/detail/metafunction/
   sandbox/tree_node/boost/detail/metafunction/container_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/detail/metafunction/has_first_type.hpp   (contents, props changed)
   sandbox/tree_node/boost/detail/metafunction/has_second_type.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/
   sandbox/tree_node/boost/tree_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/_detail/
   sandbox/tree_node/boost/tree_node/_detail/config_begin.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/_detail/config_end.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/algorithm/
   sandbox/tree_node/boost/tree_node/algorithm/dereference_iterator.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/breadth_first_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/breadth_first_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/depth_first_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/depth_first_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/in_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/nary_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/post_order_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/post_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/pre_order_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/pre_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/preprocessor.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/traversal_state.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/
   sandbox/tree_node/boost/tree_node/typeof/associative_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/binary_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/breadth_first_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/breadth_first_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/depth_first_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/depth_first_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/in_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/nary_node.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/post_order_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/post_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/pre_order_desc_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/pre_order_iterator.hpp   (contents, props changed)
   sandbox/tree_node/boost/tree_node/typeof/traversal_state.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_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/
   sandbox/tree_node/libs/tree_node/
   sandbox/tree_node/libs/tree_node/doc/
   sandbox/tree_node/libs/tree_node/doc/Jamroot   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/changelog.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_assoc_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_base_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_binary_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_descendant_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_full_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_nary_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_non_assoc_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concept_type_generator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/concepts.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/
   sandbox/tree_node/libs/tree_node/doc/html/index.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/changelog.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/associative_tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/base_tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/binary_tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/full_tree_node_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/nary_tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/non_assoc_tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_desc_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/type_generator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_desc_iter.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copy_constructible.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copyable_and_movable.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_desc_iter.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/dereference_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_base_fwd.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_fwd_decl.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_header.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_def.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_hdr.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/in_order_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_desc_iter.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_desc_iter.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_iterator.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/traversal_state.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/tree_node_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag_base.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_red_black_flag_gen.html   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_associative_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_associative_node_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_associative_node_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_binary_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_binary_node_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_binary_node_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_desc_iter.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_copy_constructible.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_copyable_and_movable.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_depth_first_desc_iter.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_depth_first_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_dereference_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_base_fwd.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_fwd_decl.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_header.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_def.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_hdr.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_in_order_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_nary_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_nary_node_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_nary_node_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_post_order_desc_iter.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_post_order_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_pre_order_desc_iter.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_pre_order_iterator.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_traversal_state.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_tree_node_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_count.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_count_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_count_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_height.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_height_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_height_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_position.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_position_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_position_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_base.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_gen.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/reference.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/doc/tree_node.qbk   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/
   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/default_unconstruct_type.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.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/show_functions.cpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/show_functions.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp   (contents, props changed)
   sandbox/tree_node/libs/tree_node/test/
   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)
Added: sandbox/container_gen/LICENSE_1_0.txt
==============================================================================
--- (empty file)
+++ sandbox/container_gen/LICENSE_1_0.txt	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
Added: sandbox/container_gen/boost.png
==============================================================================
Binary file. No diff available.
Added: sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/c_str_cmp_selectors.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,131 @@
+//=======================================================================
+// 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_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+
+#if !defined BOOST_NO_CWCHAR
+#include <cwchar>
+#endif
+
+//[reference__c_str_compare_selectors
+namespace boost {
+
+    struct c_str_equivalence_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            class type
+            {
+                inline static bool
+                    _evaluate(
+                        T const& lhs
+                      , T const& rhs
+                      , ::std::tr1::true_type
+                    )
+                {
+                    return !strcmp(lhs, rhs);
+                }
+
+//<-
+#if !defined BOOST_NO_CWCHAR
+//->
+                inline static bool
+                    _evaluate(
+                        T const& lhs
+                      , T const& rhs
+                      , ::std::tr1::false_type
+                    )
+                {
+                    return !wcscmp(lhs, rhs);
+                }
+//<-
+#endif
+//->
+
+             public:
+                inline bool operator()(T const& lhs, T const& rhs) const
+                {
+                    return _evaluate(
+                        lhs
+                      , rhs
+                      , ::std::tr1::is_same<
+                            typename ::std::tr1::remove_cv<
+                                typename ::std::tr1::remove_pointer<
+                                    typename ::std::tr1::remove_extent<T>::type
+                                >::type
+                            >::type
+                          , char
+                        >()
+                    );
+                }
+            };
+        };
+    };
+
+    struct c_str_ordering_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            class type
+            {
+                inline static bool
+                    _evaluate(
+                        T const& lhs
+                      , T const& rhs
+                      , ::std::tr1::true_type
+                    )
+                {
+                    return strcmp(lhs, rhs) < 0;
+                }
+
+//<-
+#if !defined BOOST_NO_CWCHAR
+//->
+                inline static bool
+                    _evaluate(
+                        T const& lhs
+                      , T const& rhs
+                      , ::std::tr1::false_type
+                    )
+                {
+                    return wcscmp(lhs, rhs) < 0;
+                }
+//<-
+#endif
+//->
+
+             public:
+                inline bool operator()(T const& lhs, T const& rhs) const
+                {
+                    return _evaluate(
+                        lhs
+                      , rhs
+                      , ::std::tr1::is_same<
+                            typename ::std::tr1::remove_cv<
+                                typename ::std::tr1::remove_pointer<
+                                    typename ::std::tr1::remove_extent<T>::type
+                                >::type
+                            >::type
+                          , char
+                        >()
+                    );
+                }
+            };
+        };
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_typeof.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/c_str_cmp_selectors_typeof.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,21 @@
+//=======================================================================
+// 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_CONTAINER_GEN_C_STR_CMP_SELECTORS_TYPEOF_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_TYPEOF_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/container_gen/c_str_cmp_selectors.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(::boost::c_str_equivalence_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::c_str_ordering_selector);
+
+#endif  // BOOST_CONTAINER_GEN_C_STR_CMP_SELECTORS_TYPEOF_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/container_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/container_gen.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1296 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Copyright 2011-2012 Cromwell D. Enage
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole,
+//          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_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+  //===========================================================================
+  // The main container_gen metafunction uses partial specialization,
+  // so we also include a workaround.
+  //===========================================================================
+
+//[reference__container_gen
+namespace boost {
+
+    template <typename Selector, typename T1, typename T2 = void>
+    struct container_gen
+        //<-
+      : ::boost::mpl::apply_wrap2<Selector,T1,T2>
+        //->
+    {
+        // typedef .... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(3, container_gen, (Selector, T1, T2))
+        //->
+    };
+}  // namespace boost
+//]
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <vector>
+#include <deque>
+#include <list>
+#include <set>
+#include <map>
+
+#if !defined BOOST_MSVC
+#include <boost/array.hpp>
+#include <boost/tr1/array.hpp>
+#include <boost/ptr_container/ptr_array.hpp>
+#endif
+
+#include <boost/unordered/unordered_set.hpp>
+#include <boost/unordered/unordered_map.hpp>
+
+#include <boost/tr1/unordered_set.hpp>
+#include <boost/tr1/unordered_map.hpp>
+
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/ptr_container/ptr_unordered_map.hpp>
+
+#include <boost/container/vector.hpp>
+#include <boost/container/stable_vector.hpp>
+#include <boost/container/deque.hpp>
+#include <boost/container/list.hpp>
+#include <boost/container/slist.hpp>
+#include <boost/container/set.hpp>
+#include <boost/container/map.hpp>
+#include <boost/container/flat_set.hpp>
+#include <boost/container/flat_map.hpp>
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/container_gen/selectors.hpp>
+
+//[reference__container_gen__multimap_specialization
+namespace boost {
+
+    //<-
+    template <typename Selector, typename T1, typename T2 = void>
+    struct container_gen
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(3, container_gen, (Selector, T1, T2))
+    };
+
+#if !defined BOOST_MSVC
+    template <typename ConstantSize, typename IsTR1, typename ValueType>
+    struct container_gen<array_selector<ConstantSize,IsTR1>,ValueType,void>
+      : ::boost::mpl::if_<
+            IsTR1
+          , ::std::tr1::array<ValueType,ConstantSize::value>
+          , ::boost::array<ValueType,ConstantSize::value>
+        >
+    {
+    };
+#endif
+
+    template <typename IsBoost, typename AllocatorSelector, typename ValueType>
+    struct container_gen<
+        vector_selector<IsBoost,AllocatorSelector>
+      , ValueType
+      , void
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , ValueType
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    IsBoost
+                  , ::boost::container::vector<ValueType,_allocator>
+                  , ::std::vector<ValueType,_allocator>
+                >::type
+                type;
+    };
+
+    template <typename AllocatorSelector, typename ValueType>
+    struct container_gen<
+        stable_vector_selector<AllocatorSelector>
+      , ValueType
+      , void
+    >
+    {
+        typedef ::boost::container::stable_vector<
+                    ValueType
+                  , typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , ValueType
+                    >::type
+                >
+                type;
+    };
+
+    template <typename IsBoost, typename AllocatorSelector, typename ValueType>
+    struct container_gen<
+        deque_selector<IsBoost,AllocatorSelector>
+      , ValueType
+      , void
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , ValueType
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    IsBoost
+                  , ::boost::container::deque<ValueType,_allocator>
+                  , ::std::deque<ValueType,_allocator>
+                >::type
+                type;
+    };
+
+    template <typename IsBoost, typename AllocatorSelector, typename ValueType>
+    struct container_gen<
+        list_selector<IsBoost,AllocatorSelector>
+      , ValueType
+      , void
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , ValueType
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    IsBoost
+                  , ::boost::container::list<ValueType,_allocator>
+                  , ::std::list<ValueType,_allocator>
+                >::type
+                type;
+    };
+
+    template <typename AllocatorSelector, typename ValueType>
+    struct container_gen<slist_selector<AllocatorSelector>,ValueType,void>
+    {
+        typedef ::boost::container::slist<
+                    ValueType
+                  , typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , ValueType
+                    >::type
+                >
+                type;
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        set_selector<IsBoost,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsBoost
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::container::set<Key,_comparator,_allocator>
+                      , ::boost::container::map<
+                            Key
+                          , Mapped
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::set<Key,_comparator,_allocator>
+                      , ::std::map<Key,Mapped,_comparator,_allocator>
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        map_selector<IsBoost,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsBoost
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::container::set<Key,_comparator,_allocator>
+                      , ::boost::container::map<
+                            Key
+                          , Mapped
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::set<Key,_comparator,_allocator>
+                      , ::std::map<Key,Mapped,_comparator,_allocator>
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        multiset_selector<IsBoost,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsBoost
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::container::multiset<
+                            Key
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::container::multimap<
+                            Key
+                          , Mapped
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::multiset<Key,_comparator,_allocator>
+                      , ::std::multimap<Key,Mapped,_comparator,_allocator>
+                    >
+                >::type
+                type;
+    };
+    //->
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        multimap_selector<IsBoost,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsBoost
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::container::multiset<
+                            Key
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::container::multimap<
+                            Key
+                          , Mapped
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::multiset<Key,_comparator,_allocator>
+                      , ::std::multimap<Key,Mapped,_comparator,_allocator>
+                    >
+                >::type
+                type;
+    };
+
+    //<-
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        hash_set_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , Key
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsTR1
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::tr1::unordered_set<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::std::tr1::unordered_map<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::unordered_set<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::unordered_map<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        hash_map_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , Key
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsTR1
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::tr1::unordered_set<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::std::tr1::unordered_map<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::unordered_set<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::unordered_map<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        hash_multiset_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , Key
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsTR1
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::tr1::unordered_multiset<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::std::tr1::unordered_multimap<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::unordered_multiset<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::unordered_multimap<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        hash_multimap_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    AllocatorSelector
+                  , Key
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::eval_if<
+                    IsTR1
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::tr1::unordered_multiset<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::std::tr1::unordered_multimap<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                  , ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::unordered_multiset<
+                            Key
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                      , ::boost::unordered_multimap<
+                            Key
+                          , Mapped
+                          , _hasher
+                          , _comparator
+                          , _allocator
+                        >
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        flat_set_selector<CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::container::flat_set<Key,_comparator,_allocator>
+                  , ::boost::container::flat_map<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , _allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        flat_map_selector<CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::container::flat_set<Key,_comparator,_allocator>
+                  , ::boost::container::flat_map<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , _allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        flat_multiset_selector<CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::container::flat_multiset<
+                        Key
+                      , _comparator
+                      , _allocator
+                    >
+                  , ::boost::container::flat_multimap<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , _allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename AllocatorSelector
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        flat_multimap_selector<CompareSelector,AllocatorSelector>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+        typedef typename ::boost::mpl::apply_wrap2<
+                    AllocatorSelector
+                  , Key
+                  , Mapped
+                >::type
+                _allocator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::container::flat_multiset<
+                        Key
+                      , _comparator
+                      , _allocator
+                    >
+                  , ::boost::container::flat_multimap<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , _allocator
+                    >
+                >::type
+                type;
+    };
+
+#if !defined BOOST_MSVC
+    template <
+        typename ConstantSize
+      , typename CloneAllocator
+      , typename ValueType
+    >
+    struct container_gen<
+        ptr_array_selector<ConstantSize,CloneAllocator>
+      , ValueType
+      , void
+    >
+    {
+        typedef ::boost::ptr_array<
+                    ValueType
+                  , ConstantSize::value
+                  , CloneAllocator
+                >
+                type;
+    };
+#endif
+
+    template <
+        typename CloneAllocator
+      , typename Allocator
+      , typename ValueType
+    >
+    struct container_gen<
+        ptr_vector_selector<CloneAllocator,Allocator>
+      , ValueType
+      , void
+    >
+    {
+        typedef ::boost::ptr_vector<ValueType,CloneAllocator,Allocator> type;
+    };
+
+    template <
+        typename CloneAllocator
+      , typename Allocator
+      , typename ValueType
+    >
+    struct container_gen<
+        ptr_deque_selector<CloneAllocator,Allocator>
+      , ValueType
+      , void
+    >
+    {
+        typedef ::boost::ptr_deque<ValueType,CloneAllocator,Allocator> type;
+    };
+
+    template <
+        typename CloneAllocator
+      , typename Allocator
+      , typename ValueType
+    >
+    struct container_gen<
+        ptr_list_selector<CloneAllocator,Allocator>
+      , ValueType
+      , void
+    >
+    {
+        typedef ::boost::ptr_list<ValueType,CloneAllocator,Allocator> type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_set_selector<CompareSelector,CloneAllocator,Allocator>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_set<Key,_comparator,CloneAllocator,Allocator>
+                  , ::boost::ptr_map<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_map_selector<CompareSelector,CloneAllocator,Allocator>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_set<Key,_comparator,CloneAllocator,Allocator>
+                  , ::boost::ptr_map<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_multiset_selector<CompareSelector,CloneAllocator,Allocator>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_multiset<
+                        Key
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_multimap<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_multimap_selector<CompareSelector,CloneAllocator,Allocator>
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_multiset<
+                        Key
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_multimap<
+                        Key
+                      , Mapped
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_hash_set_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_unordered_set<
+                        Key
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_unordered_map<
+                        Key
+                      , Mapped
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_hash_map_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_unordered_set<
+                        Key
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_unordered_map<
+                        Key
+                      , Mapped
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_hash_multiset_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_unordered_multiset<
+                        Key
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_unordered_multimap<
+                        Key
+                      , Mapped
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+      , typename Key
+      , typename Mapped
+    >
+    struct container_gen<
+        ptr_hash_multimap_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+      , Key
+      , Mapped
+    >
+    {
+     private:
+        typedef typename ::boost::mpl::apply_wrap1<
+                    HashSelector
+                  , Key
+                >::type
+                _hasher;
+        typedef typename ::boost::mpl::apply_wrap1<
+                    CompareSelector
+                  , Key
+                >::type
+                _comparator;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_void<Mapped>
+                  , ::boost::ptr_unordered_multiset<
+                        Key
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                  , ::boost::ptr_unordered_multimap<
+                        Key
+                      , Mapped
+                      , _hasher
+                      , _comparator
+                      , CloneAllocator
+                      , Allocator
+                    >
+                >::type
+                type;
+    };
+    //->
+}  // namespace boost
+//]
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_CONTAINER_GEN_CONTAINER_GEN_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/emplace_assoc_function_gen.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,828 @@
+//=======================================================================
+// 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_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/container/detail/preprocessor.hpp>
+#endif
+
+namespace boost { namespace detail {
+
+    template <typename F, typename C>
+    class emplace_assoc_function_proxy
+    {
+        F const _function;
+        C& _container;
+
+     public:
+        explicit emplace_assoc_function_proxy(C& c);
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename ...Args>
+        inline emplace_assoc_function_proxy&
+            operator()(typename C::key_type const& key, Args&& ...args)
+        {
+            this->_function(_container, key, ::boost::forward<Args>(args)...);
+            return *this;
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        inline emplace_assoc_function_proxy&                                 \
+            operator()(                                                      \
+                typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            )                                                                \
+        {                                                                    \
+            this->_function(                                                 \
+                _container                                                   \
+              , key                                                          \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_FORWARD                         \
+                  , poop                                                     \
+                )                                                            \
+            );                                                               \
+            return *this;                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename F, typename C>
+    emplace_assoc_function_proxy<F,C>::emplace_assoc_function_proxy(C& c)
+      : _function(), _container(c)
+    {
+    }
+
+    struct uac_emplace_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<uac_emplace_associative_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            return _container.emplace(
+                key
+              , ::boost::move(
+                    typename C::mapped_type(::boost::forward<Args>(args)...)
+                )
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.emplace(                                       \
+                key                                                          \
+              , ::boost::move(                                               \
+                    typename C::mapped_type(                                 \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_PP_DEC(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<uac_emplace_associative_function,C>
+        uac_emplace_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            uac_emplace_associative_function
+          , C
+        >(_container);
+    }
+
+    struct uac_emplace_emu_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<uac_emplace_emu_associative_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            return _container.insert(
+                typename C::value_type(
+                    key
+                  , typename C::mapped_type(::boost::forward<Args>(args)...)
+                )
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.insert(                                        \
+                typename C::value_type(                                      \
+                    key                                                      \
+                  , typename C::mapped_type(                                 \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<uac_emplace_emu_associative_function,C>
+        uac_emplace_emu_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            uac_emplace_emu_associative_function
+          , C
+        >(_container);
+    }
+
+    struct mac_emplace_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<mac_emplace_associative_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            return ::std::make_pair(
+                _container.emplace(
+                    key
+                  , ::boost::move(
+                        typename C::mapped_type(
+                            ::boost::forward<Args>(args)...
+                        )
+                    )
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.emplace(                                          \
+                    key                                                      \
+                  , ::boost::move(                                           \
+                        typename C::mapped_type(                             \
+                            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                 \
+                                n                                            \
+                              , BOOST_CONTAINER_PP_PARAM_FORWARD             \
+                              , poop                                         \
+                            )                                                \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_PP_DEC(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<mac_emplace_associative_function,C>
+        mac_emplace_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            mac_emplace_associative_function
+          , C
+        >(_container);
+    }
+
+    struct mac_emplace_emu_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<mac_emplace_emu_associative_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            return ::std::make_pair(
+                _container.insert(
+                    typename C::value_type(
+                        key
+                      , typename C::mapped_type(
+                            ::boost::forward<Args>(args)...
+                        )
+                    )
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.insert(                                           \
+                    typename C::value_type(                                  \
+                        key                                                  \
+                      , typename C::mapped_type(                             \
+                            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                 \
+                                n                                            \
+                              , BOOST_CONTAINER_PP_PARAM_FORWARD             \
+                              , poop                                         \
+                            )                                                \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<mac_emplace_emu_associative_function,C>
+        mac_emplace_emu_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            mac_emplace_emu_associative_function
+          , C
+        >(_container);
+    }
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+
+    struct huac_emplace_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<huac_emplace_associative_function,C>
+            operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.emplace(                                       \
+                ::boost::unordered::piecewise_construct                      \
+              , ::boost::make_tuple(key)                                     \
+              , ::boost::make_tuple(                                         \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , poop                                                 \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<huac_emplace_associative_function,C>
+        huac_emplace_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            huac_emplace_associative_function
+          , C
+        >(_container);
+    }
+
+    struct hmac_emplace_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<hmac_emplace_associative_function,C>
+            operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.emplace(                                          \
+                    ::boost::unordered::piecewise_construct                  \
+                  , ::boost::make_tuple(key)                                 \
+                  , ::boost::make_tuple(                                     \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<hmac_emplace_associative_function,C>
+        hmac_emplace_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            hmac_emplace_associative_function
+          , C
+        >(_container);
+    }
+
+#if defined BOOST_HAS_TR1_UNORDERED_MAP
+
+// Handle different native TR1 emplacement implementations.
+#if defined BOOST_MSVC
+
+    struct tr1_huac_emplace_associative_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<tr1_huac_emplace_associative_function,C>
+            operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.emplace(                                       \
+                ::boost::move(                                               \
+                    typename C::value_type(                                  \
+                        key                                                  \
+                      , typename C::mapped_type(                             \
+                            BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                 \
+                                n                                            \
+                              , BOOST_CONTAINER_PP_PARAM_FORWARD             \
+                              , poop                                         \
+                            )                                                \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<tr1_huac_emplace_associative_function,C>
+        tr1_huac_emplace_associative_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<
+            tr1_huac_emplace_associative_function
+          , C
+        >(_container);
+    }
+
+    typedef tr1_huac_emplace_associative_function
+            tr1_hmac_emplace_associative_function;
+#else  // TR1 == Boost wrt unordered_[multi]map::emplace
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif
+
+#else  // !defined BOOST_HAS_TR1_UNORDERED_MAP
+#define BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // BOOST_HAS_TR1_UNORDERED_MAP
+
+#if defined BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+    typedef huac_emplace_associative_function
+            tr1_huac_emplace_associative_function;
+    typedef hmac_emplace_associative_function
+            tr1_hmac_emplace_associative_function;
+#undef BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+    struct ua_ptr_emplace_assoc_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            typedef typename ::std::tr1::remove_pointer<
+                        typename C::mapped_type
+                    >::type
+                    _data_type;
+
+            typename C::key_type k(key);
+            return _container.insert(
+                k
+              , new _data_type(::boost::forward<Args>(args)...)
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            typedef typename ::std::tr1::remove_pointer<                     \
+                        typename C::mapped_type                              \
+                    >::type                                                  \
+                    _data_type;                                              \
+            typename C::key_type k(key);                                     \
+            return _container.insert(                                        \
+                k                                                            \
+              , new _data_type(                                              \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , poop                                                 \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>
+        ua_ptr_emplace_assoc_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<ua_ptr_emplace_assoc_function,C>(
+            _container
+        );
+    }
+
+    struct ma_ptr_emplace_assoc_function
+    {
+        template <typename C>
+        emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(
+                C& _container
+              , typename C::key_type const& key
+              , Args&& ...args
+            ) const
+        {
+            typedef typename ::std::tr1::remove_pointer<
+                        typename C::mapped_type
+                    >::type
+                    _data_type;
+
+            typename C::key_type k(key);
+            return ::std::make_pair(
+                _container.insert(
+                    k
+                  , new _data_type(::boost::forward<Args>(args)...)
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO(z, n, poop)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+              , typename C::key_type const& key                              \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            typedef typename ::std::tr1::remove_pointer<                     \
+                        typename C::mapped_type                              \
+                    >::type                                                  \
+                    _data_type;                                              \
+            typename C::key_type k(key);                                     \
+            return ::std::make_pair(                                         \
+                _container.insert(                                           \
+                    k                                                        \
+                  , new _data_type(                                          \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPL_ASSOC_FUNC_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>
+        ma_ptr_emplace_assoc_function::operator[](C& _container) const
+    {
+        return emplace_assoc_function_proxy<ma_ptr_emplace_assoc_function,C>(
+            _container
+        );
+    }
+}}  // namespace boost::detail
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/container_gen/has_emplace_mfunc_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/is_tr1_selector.hpp>
+#endif
+
+//[reference__emplace_associative_function_gen
+namespace boost {
+
+    template <typename Selector>
+    struct emplace_associative_function_gen
+        //<-
+      : ::boost::mpl::eval_if<
+            is_ptr_selector<Selector>
+          , ::boost::mpl::if_<
+                is_multiple_associative_selector<Selector>
+              , detail::ma_ptr_emplace_assoc_function
+              , detail::ua_ptr_emplace_assoc_function
+            >
+          , ::boost::mpl::eval_if<
+                has_emplace_member_function_selector<Selector>
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+              , ::boost::mpl::eval_if<
+                    is_hashed_associative_selector<Selector>
+                  , ::boost::mpl::eval_if<
+                        is_tr1_selector<Selector>
+                      , ::boost::mpl::if_<
+                            is_unique_associative_selector<Selector>
+                          , detail::tr1_huac_emplace_associative_function
+                          , detail::tr1_hmac_emplace_associative_function
+                        >
+                      , ::boost::mpl::if_<
+                            is_unique_associative_selector<Selector>
+                          , detail::huac_emplace_associative_function
+                          , detail::hmac_emplace_associative_function
+                        >
+                    >
+#endif
+                  , ::boost::mpl::if_<
+                        is_multiple_associative_selector<Selector>
+                      , detail::mac_emplace_associative_function
+                      , detail::uac_emplace_associative_function
+                    >
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+                >
+#endif
+              , ::boost::mpl::if_<
+                    is_multiple_associative_selector<Selector>
+                  , detail::mac_emplace_emu_associative_function
+                  , detail::uac_emplace_emu_associative_function
+                >
+            >
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , emplace_associative_function_gen
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_CONTAINER_GEN_EMPLACE_ASSOC_FUNCTION_GEN_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/emplace_function_gen.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,850 @@
+//=======================================================================
+// 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_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#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/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/container/detail/preprocessor.hpp>
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO(z, n, itr)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.emplace(                                          \
+                    itr                                                      \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , _                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO(z, n, itr)    \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , _                                                        \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.insert(                                           \
+                    itr                                                      \
+                  , typename C::value_type(                                  \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , _                                                \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+
+namespace boost { namespace detail {
+
+    template <typename F, typename C>
+    class emplace_function_proxy
+    {
+        F const _function;
+        C& _container;
+
+     public:
+        explicit emplace_function_proxy(C& c);
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename ...Args>
+        inline emplace_function_proxy& operator()(Args&& ...args)
+        {
+            this->_function(_container, ::boost::forward<Args>(args)...);
+            return *this;
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        BOOST_PP_EXPR_IF(n, template <)                                      \
+            BOOST_PP_ENUM_PARAMS_Z(z, n, typename P)                         \
+        BOOST_PP_EXPR_IF(n, >)                                               \
+        inline emplace_function_proxy&                                       \
+            operator()(                                                      \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            )                                                                \
+        {                                                                    \
+            this->_function(                                                 \
+                _container                                                   \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_FORWARD                         \
+                  , poop                                                     \
+                )                                                            \
+            );                                                               \
+            return *this;                                                    \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename F, typename C>
+    emplace_function_proxy<F,C>::emplace_function_proxy(C& c)
+      : _function(), _container(c)
+    {
+    }
+
+    struct fis_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<fis_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.emplace(
+                    _container.begin()
+                  , ::boost::forward<Args>(args)...
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+          , _container.begin()
+        )
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<fis_emplace_function,C>
+        fis_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<fis_emplace_function,C>(_container);
+    }
+
+    struct bis_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<bis_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.emplace(
+                    _container.end()
+                  , ::boost::forward<Args>(args)...
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+          , _container.end()
+        )
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<bis_emplace_function,C>
+        bis_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<bis_emplace_function,C>(_container);
+    }
+
+    struct fis_emplace_emu_function
+    {
+        template <typename C>
+        emplace_function_proxy<fis_emplace_emu_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.insert(
+                    _container.begin()
+                  , typename C::value_type(
+                        ::boost::forward<Args>(args)...
+                    )
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+          , _container.begin()
+        )
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<fis_emplace_emu_function,C>
+        fis_emplace_emu_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<fis_emplace_emu_function,C>(_container);
+    }
+
+    struct bis_emplace_emu_function
+    {
+        template <typename C>
+        emplace_function_proxy<bis_emplace_emu_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.insert(
+                    _container.end()
+                  , typename C::value_type(
+                        ::boost::forward<Args>(args)...
+                    )
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+          , _container.end()
+        )
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<bis_emplace_emu_function,C>
+        bis_emplace_emu_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<bis_emplace_emu_function,C>(_container);
+    }
+
+    struct uac_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<uac_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return _container.emplace(::boost::forward<Args>(args)...);
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.emplace(                                       \
+                BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                             \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_FORWARD                         \
+                  , poop                                                     \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<uac_emplace_function,C>
+        uac_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<uac_emplace_function,C>(_container);
+    }
+
+    struct uac_emplace_emu_function
+    {
+        template <typename C>
+        emplace_function_proxy<uac_emplace_emu_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return _container.insert(
+                typename C::value_type(::boost::forward<Args>(args)...)
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.insert(                                        \
+                typename C::value_type(                                      \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , poop                                                 \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<uac_emplace_emu_function,C>
+        uac_emplace_emu_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<uac_emplace_emu_function,C>(_container);
+    }
+
+    struct mac_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<mac_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.emplace(::boost::forward<Args>(args)...)
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.emplace(                                          \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , poop                                                 \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<mac_emplace_function,C>
+        mac_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<mac_emplace_function,C>(_container);
+    }
+
+    struct mac_emplace_emu_function
+    {
+        template <typename C>
+        emplace_function_proxy<mac_emplace_emu_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            return ::std::make_pair(
+                _container.insert(
+                    typename C::value_type(::boost::forward<Args>(args)...)
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return ::std::make_pair(                                         \
+                _container.insert(                                           \
+                    typename C::value_type(                                  \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<mac_emplace_emu_function,C>
+        mac_emplace_emu_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<mac_emplace_emu_function,C>(_container);
+    }
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#if defined BOOST_HAS_TR1_UNORDERED_SET
+
+// Handle different native TR1 emplacement implementations.
+#if defined BOOST_MSVC
+
+    struct tr1_huac_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<tr1_huac_emplace_function,C>
+            operator[](C& _container) const;
+
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            return _container.emplace(                                       \
+                ::boost::move(                                               \
+                    typename C::value_type(                                  \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+    };
+
+    template <typename C>
+    emplace_function_proxy<tr1_huac_emplace_function,C>
+        tr1_huac_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<tr1_huac_emplace_function,C>(_container);
+    }
+
+    typedef tr1_huac_emplace_function tr1_hmac_emplace_function;
+#else  // TR1 == Boost wrt unordered_[multi]set::emplace
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif
+
+#else  // !defined BOOST_HAS_TR1_UNORDERED_SET
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // BOOST_HAS_TR1_UNORDERED_SET
+
+#if defined BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+    typedef uac_emplace_function tr1_huac_emplace_function;
+    typedef mac_emplace_function tr1_hmac_emplace_function;
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_USE_NO_NATIVE_TR1
+#endif  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+
+    struct ptr_sequence_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<ptr_sequence_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            typedef typename ::std::tr1::remove_pointer<
+                        typename C::value_type
+                    >::type
+                    _data_type;
+
+            return ::std::make_pair(
+                _container.insert(
+                    _container.end()
+                  , new _data_type(::boost::forward<Args>(args)...)
+                )
+              , true
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            typedef typename ::std::tr1::remove_pointer<                     \
+                        typename C::value_type                               \
+                    >::type                                                  \
+                    _data_type;                                              \
+            return ::std::make_pair(                                         \
+                _container.insert(                                           \
+                    _container.end()                                         \
+                  , new _data_type(                                          \
+                        BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                     \
+                            n                                                \
+                          , BOOST_CONTAINER_PP_PARAM_FORWARD                 \
+                          , poop                                             \
+                        )                                                    \
+                    )                                                        \
+                )                                                            \
+              , true                                                         \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<ptr_sequence_emplace_function,C>
+        ptr_sequence_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<ptr_sequence_emplace_function,C>(
+            _container
+        );
+    }
+
+    struct ua_ptr_container_emplace_function
+    {
+        template <typename C>
+        emplace_function_proxy<ua_ptr_container_emplace_function,C>
+            operator[](C& _container) const;
+
+#if defined BOOST_CONTAINER_PERFECT_FORWARDING
+        template <typename C, typename ...Args>
+        inline ::std::pair<typename C::iterator,bool>
+            operator()(C& _container, Args&& ...args) const
+        {
+            typedef typename ::std::tr1::remove_pointer<
+                        typename C::value_type
+                    >::type
+                    _data_type;
+
+            return _container.insert(
+                new _data_type(::boost::forward<Args>(args)...)
+            );
+        }
+#else  // !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#define BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO(z, n, poop)   \
+        template <                                                           \
+            typename C                                                       \
+            BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename P)                \
+        >                                                                    \
+        inline ::std::pair<typename C::iterator,bool>                        \
+            operator()(                                                      \
+                C& _container                                                \
+                BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, z)(                    \
+                    n                                                        \
+                  , BOOST_CONTAINER_PP_PARAM_LIST                            \
+                  , poop                                                     \
+                )                                                            \
+            ) const                                                          \
+        {                                                                    \
+            typedef typename ::std::tr1::remove_pointer<                     \
+                        typename C::value_type                               \
+                    >::type                                                  \
+                    _data_type;                                              \
+            return _container.insert(                                        \
+                new _data_type(                                              \
+                    BOOST_PP_CAT(BOOST_PP_ENUM_, z)(                         \
+                        n                                                    \
+                      , BOOST_CONTAINER_PP_PARAM_FORWARD                     \
+                      , poop                                                 \
+                    )                                                        \
+                )                                                            \
+            );                                                               \
+        }                                                                    \
+//!
+        BOOST_PP_REPEAT(
+            BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+          , BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+          , _
+        )
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_CALL_OP_MACRO
+#endif  // BOOST_CONTAINER_PERFECT_FORWARDING
+    };
+
+    template <typename C>
+    emplace_function_proxy<ua_ptr_container_emplace_function,C>
+        ua_ptr_container_emplace_function::operator[](C& _container) const
+    {
+        return emplace_function_proxy<ua_ptr_container_emplace_function,C>(
+            _container
+        );
+    }
+}}  // namespace boost::detail
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQ_EMU_MACRO
+#undef BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_SEQUENCE_MACRO
+#endif
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/container_gen/has_emplace_mfunc_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+#include <boost/container_gen/is_tr1_selector.hpp>
+#endif
+
+//[reference__emplace_function_gen
+namespace boost {
+
+    template <typename Selector>
+    struct emplace_function_gen
+        //<-
+      : ::boost::mpl::eval_if<
+            is_ptr_selector<Selector>
+          , ::boost::mpl::if_<
+                is_unique_associative_selector<Selector>
+              , detail::ua_ptr_container_emplace_function
+              , detail::ptr_sequence_emplace_function
+            >
+          , ::boost::mpl::eval_if<
+                has_emplace_member_function_selector<Selector>
+              , ::boost::mpl::eval_if<
+                    is_associative_selector<Selector>
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+                  , ::boost::mpl::eval_if<
+                        is_tr1_selector<Selector>
+                      , ::boost::mpl::if_<
+                            is_multiple_associative_selector<Selector>
+                          , detail::tr1_hmac_emplace_function
+                          , detail::tr1_huac_emplace_function
+                        >
+#endif
+                      , ::boost::mpl::if_<
+                            is_multiple_associative_selector<Selector>
+                          , detail::mac_emplace_function
+                          , detail::uac_emplace_function
+                        >
+#if !defined BOOST_CONTAINER_PERFECT_FORWARDING
+                    >
+#endif
+                  , ::boost::mpl::identity<detail::bis_emplace_function>
+                >
+              , ::boost::mpl::eval_if<
+                    is_associative_selector<Selector>
+                  , ::boost::mpl::if_<
+                        is_unique_associative_selector<Selector>
+                      , detail::uac_emplace_emu_function
+                      , detail::mac_emplace_emu_function
+                    >
+                  , ::boost::mpl::identity<detail::bis_emplace_emu_function>
+                >
+            >
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, emplace_function_gen, (Selector))
+        //->
+    };
+}  // namespace boost
+//]
+
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <typename AllocatorSelector>
+    struct emplace_function_gen<slist_selector<AllocatorSelector> >
+    {
+        typedef detail::fis_emplace_function type;
+    };
+}  // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+    template <>
+    struct emplace_function_gen<slist_selector_base>
+    {
+        typedef detail::fis_emplace_emu_function type;
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif  // BOOST_CONTAINER_GEN_EMPLACE_FUNCTION_GEN_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/has_emplace_mfunc_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,155 @@
+//=======================================================================
+// 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_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__has_emplace_member_function_selector
+namespace boost {
+
+    template <typename Selector>
+    struct has_emplace_member_function_selector
+        //<-
+      : ::boost::mpl::false_
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , has_emplace_member_function_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/is_flat_assoc_selector.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+#define BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE ::boost::mpl::true_
+#else
+#define BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE \
+::boost::mpl::if_<IsBoost,::boost::mpl::true_,::boost::mpl::false_>::type
+#endif
+
+namespace boost {
+
+    template <typename Selector>
+    struct has_emplace_member_function_selector
+      : ::boost::mpl::if_<
+            is_flat_associative_selector<Selector>
+          , ::boost::mpl::true_
+          , is_hashed_associative_selector<Selector>
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , has_emplace_member_function_selector
+          , (Selector)
+        )
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct has_emplace_member_function_selector<
+        vector_selector<IsBoost,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct has_emplace_member_function_selector<
+        deque_selector<IsBoost,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct has_emplace_member_function_selector<
+        list_selector<IsBoost,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <typename AllocatorSelector>
+    struct has_emplace_member_function_selector<
+        stable_vector_selector<AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename AllocatorSelector>
+    struct has_emplace_member_function_selector<
+        slist_selector<AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct has_emplace_member_function_selector<
+        set_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct has_emplace_member_function_selector<
+        map_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct has_emplace_member_function_selector<
+        multiset_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct has_emplace_member_function_selector<
+        multimap_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+    {
+    };
+}  // namespace boost
+
+#undef BOOST_HAS_EMPLACE_MFUNC_SELECTOR_SPEC_BASE
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_CONTAINER_GEN_HAS_EMPLACE_MFUNC_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/has_stable_iters_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,153 @@
+//=======================================================================
+// 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_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct has_stable_iterators_selector
+      : ::boost::mpl::and_<
+            ::boost::mpl::not_<is_random_access_selector<Selector> >
+          , ::boost::mpl::not_<is_hashed_associative_selector<Selector> >
+        >
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , has_stable_iterators_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <typename AllocatorSelector>
+    struct has_stable_iterators_selector<
+        stable_vector_selector<AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct has_stable_iterators_selector<
+        flat_set_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::false_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct has_stable_iterators_selector<
+        flat_map_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::false_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct has_stable_iterators_selector<
+        flat_multiset_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::false_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct has_stable_iterators_selector<
+        flat_multimap_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::false_
+    {
+    };
+}  // namespace boost
+
+#endif  // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/has_stable_iterators.hpp>
+
+//[reference__has_stable_iterators_selector
+namespace boost {
+
+    template <typename Selector>
+    struct has_stable_iterators_selector
+        //<-
+      : ::boost::detail::metafunction::has_stable_iterators<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , has_stable_iterators_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#if !defined BOOST_MSVC
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <>
+    struct has_stable_iterators_selector<array_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct has_stable_iterators_selector<ptr_array_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <typename ConstantSize, typename IsTR1>
+    struct has_stable_iterators_selector<array_selector<ConstantSize,IsTR1> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <typename ConstantSize, typename CloneAllocator>
+    struct has_stable_iterators_selector<
+        ptr_array_selector<ConstantSize,CloneAllocator>
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif  // BOOST_MSVC
+#endif  // BOOST_CONTAINER_GEN_HAS_STABLE_ITERS_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_associative_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_associative_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,69 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/or.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_associative_selector
+      : ::boost::mpl::or_<
+            is_unique_associative_selector<Selector>
+          , is_multiple_associative_selector<Selector>
+        >
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_associative_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+//[reference__is_associative_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_associative_selector
+        //<-
+      : ::boost::detail::metafunction::is_associative_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_associative_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_CONTAINER_GEN_IS_ASSOCIATIVE_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_flat_assoc_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,101 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_flat_associative_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_flat_associative_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_flat_associative_selector<
+        flat_set_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_flat_associative_selector<
+        flat_map_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_flat_associative_selector<
+        flat_multiset_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_flat_associative_selector<
+        flat_multimap_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_flat_assoc_container.hpp>
+
+//[reference__is_flat_associative_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_flat_associative_selector
+        //<-
+      : ::boost::detail::metafunction::is_flat_associative_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_flat_associative_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_CONTAINER_GEN_IS_FLAT_ASSOC_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_hashed_assoc_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,230 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_hashed_associative_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_hashed_associative_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_HAS_HASH
+
+namespace boost {
+
+    template <>
+    struct is_hashed_associative_selector<hash_set_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_hashed_associative_selector<hash_map_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_hashed_associative_selector<hash_multiset_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_hashed_associative_selector<hash_multimap_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_HAS_HASH
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_hashed_associative_selector<
+        hash_set_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_hashed_associative_selector<
+        hash_map_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_hashed_associative_selector<
+        hash_multiset_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_hashed_associative_selector<
+        hash_multimap_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_hashed_associative_selector<
+        ptr_hash_set_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_hashed_associative_selector<
+        ptr_hash_map_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_hashed_associative_selector<
+        ptr_hash_multiset_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_hashed_associative_selector<
+        ptr_hash_multimap_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_hashed_assoc_container.hpp>
+
+//[reference__is_hashed_associative_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_hashed_associative_selector
+        //<-
+      : ::boost::detail::metafunction::is_hashed_associative_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_hashed_associative_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_CONTAINER_GEN_IS_HASHED_ASSOC_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_multiple_assoc_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,242 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || defined BOOST_TYPEOF_EMULATION
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_multiple_associative_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_multiple_associative_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <>
+    struct is_multiple_associative_selector<multiset_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_multiple_associative_selector<multimap_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_multiple_associative_selector<ptr_multiset_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_multiple_associative_selector<ptr_multimap_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+#if defined BOOST_HAS_HASH
+    template <>
+    struct is_multiple_associative_selector<hash_multiset_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_multiple_associative_selector<hash_multimap_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+#endif  // BOOST_HAS_HASH
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_multiple_associative_selector<
+        multiset_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_multiple_associative_selector<
+        multimap_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_multiple_associative_selector<
+        flat_multiset_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_multiple_associative_selector<
+        flat_multimap_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_multiple_associative_selector<
+        hash_multiset_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_multiple_associative_selector<
+        hash_multimap_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_multiple_associative_selector<
+        ptr_multiset_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_multiple_associative_selector<
+        ptr_multimap_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_multiple_associative_selector<
+        ptr_hash_multiset_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_multiple_associative_selector<
+        ptr_hash_multimap_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX && !defined BOOST_TYPEOF_EMULATION
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_multi_assoc_container.hpp>
+
+//[reference__is_multiple_associative_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_multiple_associative_selector
+        //<-
+      : ::boost::detail::metafunction::is_multiple_associative_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_multiple_associative_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_TYPEOF_EMULATION
+
+#endif  // BOOST_CONTAINER_GEN_IS_MULTIPLE_ASSOC_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_ptr_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,248 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_ptr_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_ptr_selector, (Selector))
+    };
+}  // namespace boost
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+    template <>
+    struct is_ptr_selector<ptr_array_selector_base> : ::boost::mpl::true_
+    {
+    };
+#endif
+
+    template <>
+    struct is_ptr_selector<ptr_vector_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_deque_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_list_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_set_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_map_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_multiset_selector_base> : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_ptr_selector<ptr_multimap_selector_base> : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <typename ConstantSize, typename CloneAllocator>
+    struct is_ptr_selector<ptr_array_selector<ConstantSize,CloneAllocator> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CloneAllocator, typename Allocator>
+    struct is_ptr_selector<ptr_vector_selector<CloneAllocator,Allocator> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CloneAllocator, typename Allocator>
+    struct is_ptr_selector<ptr_deque_selector<CloneAllocator,Allocator> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CloneAllocator, typename Allocator>
+    struct is_ptr_selector<ptr_list_selector<CloneAllocator,Allocator> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_set_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_map_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_multiset_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_multimap_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_hash_set_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_hash_map_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_hash_multiset_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_ptr_selector<
+        ptr_hash_multimap_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+//[reference__is_ptr_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_ptr_selector
+        //<-
+      : ::boost::detail::metafunction::is_ptr_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_ptr_selector, (Selector))
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_CONTAINER_GEN_IS_PTR_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_random_access_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,162 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_random_access_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_selector,(Selector))
+    };
+}  // namespace boost
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+    template <>
+    struct is_random_access_selector<array_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+#endif
+
+    template <>
+    struct is_random_access_selector<vector_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_random_access_selector<deque_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+#if !defined BOOST_MSVC
+    template <>
+    struct is_random_access_selector<ptr_array_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+#endif
+
+    template <>
+    struct is_random_access_selector<ptr_vector_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_random_access_selector<ptr_deque_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+    template <typename ConstantSize, typename IsTR1>
+    struct is_random_access_selector<array_selector<ConstantSize,IsTR1> >
+      : ::boost::mpl::true_
+    {
+    };
+#endif
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct is_random_access_selector<
+        vector_selector<IsBoost,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename AllocatorSelector>
+    struct is_random_access_selector<
+        stable_vector_selector<AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct is_random_access_selector<
+        deque_selector<IsBoost,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+#if !defined BOOST_MSVC
+    template <typename ConstantSize, typename CloneAllocator>
+    struct is_random_access_selector<
+        ptr_array_selector<ConstantSize,CloneAllocator>
+    > : ::boost::mpl::true_
+    {
+    };
+#endif
+
+    template <typename CloneAllocator, typename Allocator>
+    struct is_random_access_selector<
+        ptr_vector_selector<CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CloneAllocator, typename Allocator>
+    struct is_random_access_selector<
+        ptr_deque_selector<CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_random_access_container.hpp>
+
+//[reference__is_random_access_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_random_access_selector
+        //<-
+      : ::boost::detail::metafunction::is_random_access_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_selector,(Selector))
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_CONTAINER_GEN_IS_RANDOM_ACCESS_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_recursive_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,185 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__is_recursive_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_recursive_selector
+        //<-
+      : is_ptr_selector<Selector>
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_recursive_selector, (Selector))
+        //->
+    };
+}  // namespace boost
+//]
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_recursive_selector
+      : ::boost::mpl::if_<
+            is_ptr_selector<Selector>
+          , ::boost::mpl::true_
+          , is_hashed_associative_selector<Selector>
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_recursive_selector, (Selector))
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct is_recursive_selector<vector_selector<IsBoost,AllocatorSelector> >
+      : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct is_recursive_selector<deque_selector<IsBoost,AllocatorSelector> >
+      : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename IsBoost, typename AllocatorSelector>
+    struct is_recursive_selector<list_selector<IsBoost,AllocatorSelector> >
+      : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename AllocatorSelector>
+    struct is_recursive_selector<stable_vector_selector<AllocatorSelector> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <typename AllocatorSelector>
+    struct is_recursive_selector<slist_selector<AllocatorSelector> >
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_recursive_selector<
+        set_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_recursive_selector<
+        map_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : IsBoost
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_recursive_selector<
+        multiset_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_recursive_selector<
+        multimap_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::if_<
+            IsBoost
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_recursive_selector<
+        flat_set_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_recursive_selector<
+        flat_map_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_recursive_selector<
+        flat_multiset_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_recursive_selector<
+        flat_multimap_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_CONTAINER_GEN_IS_RECURSIVE_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_tr1_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,111 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+//[reference__is_tr1_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_tr1_selector
+        //<-
+      : ::boost::mpl::false_
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_tr1_selector, (Selector))
+        //->
+    };
+}  // namespace boost
+//]
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/mpl/if.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+    template <typename ConstantSize, typename IsTR1>
+    struct is_tr1_selector<array_selector<ConstantSize,IsTR1> >
+      : ::boost::mpl::if_<IsTR1,::boost::mpl::true_,::boost::mpl::false_>::type
+    {
+    };
+#endif
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_tr1_selector<
+        hash_set_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::if_<IsTR1,::boost::mpl::true_,::boost::mpl::false_>::type
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_tr1_selector<
+        hash_map_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::if_<IsTR1,::boost::mpl::true_,::boost::mpl::false_>::type
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_tr1_selector<
+        hash_multiset_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::if_<IsTR1,::boost::mpl::true_,::boost::mpl::false_>::type
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_tr1_selector<
+        hash_multimap_selector<
+            IsTR1
+          , HashSelector
+          , CompareSelector
+          , AllocatorSelector
+        >
+    > : ::boost::mpl::if_<IsTR1,::boost::mpl::true_,::boost::mpl::false_>::type
+    {
+    };
+}  // namespace boost
+
+#endif  // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_CONTAINER_GEN_IS_TR1_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/is_unique_assoc_selector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,232 @@
+//=======================================================================
+// 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_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || defined BOOST_TYPEOF_EMULATION
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost {
+
+    template <typename Selector>
+    struct is_unique_associative_selector : ::boost::mpl::false_
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_unique_associative_selector
+          , (Selector)
+        )
+    };
+}  // namespace boost
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <>
+    struct is_unique_associative_selector<set_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_unique_associative_selector<map_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_unique_associative_selector<ptr_set_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_unique_associative_selector<ptr_map_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+#if defined BOOST_HAS_HASH
+    template <>
+    struct is_unique_associative_selector<hash_set_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+
+    template <>
+    struct is_unique_associative_selector<hash_map_selector_base>
+      : ::boost::mpl::true_
+    {
+    };
+#endif  // BOOST_HAS_HASH
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_unique_associative_selector<
+        set_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsBoost
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_unique_associative_selector<
+        map_selector<IsBoost,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_unique_associative_selector<
+        flat_set_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <typename CompareSelector, typename AllocatorSelector>
+    struct is_unique_associative_selector<
+        flat_map_selector<CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_unique_associative_selector<
+        hash_set_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename IsTR1
+      , typename HashSelector
+      , typename CompareSelector
+      , typename AllocatorSelector
+    >
+    struct is_unique_associative_selector<
+        hash_map_selector<IsTR1,HashSelector,CompareSelector,AllocatorSelector>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_unique_associative_selector<
+        ptr_set_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_unique_associative_selector<
+        ptr_map_selector<CompareSelector,CloneAllocator,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_unique_associative_selector<
+        ptr_hash_set_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+
+    template <
+        typename HashSelector
+      , typename CompareSelector
+      , typename CloneAllocator
+      , typename Allocator
+    >
+    struct is_unique_associative_selector<
+        ptr_hash_map_selector<
+            HashSelector
+          , CompareSelector
+          , CloneAllocator
+          , Allocator
+        >
+    > : ::boost::mpl::true_
+    {
+    };
+}  // namespace boost
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX && !defined BOOST_TYPEOF_EMULATION
+
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/detail/metafunction/is_unique_assoc_container.hpp>
+
+//[reference__is_unique_associative_selector
+namespace boost {
+
+    template <typename Selector>
+    struct is_unique_associative_selector
+        //<-
+      : ::boost::detail::metafunction::is_unique_associative_container<
+            typename container_gen<Selector,int>::type
+        >
+        //->
+    {
+        // typedef ... type;
+        //<-
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(
+            1
+          , is_unique_associative_selector
+          , (Selector)
+        )
+        //->
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_TYPEOF_EMULATION
+
+#endif  // BOOST_CONTAINER_GEN_IS_UNIQUE_ASSOC_SELECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/selectors.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/selectors.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1210 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Copyright 2011-2012 Cromwell D. Enage
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole,
+//          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_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+
+#include <functional>
+#include <memory>
+#include <utility>
+#include <boost/mpl/if.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/tr1/functional.hpp>
+#include <boost/functional/hash.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/function/range_equal.hpp>
+#include <boost/detail/function/range_less.hpp>
+
+//[reference__template_argument_selectors
+namespace boost {
+
+    struct default_equivalence_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            typedef // implementation_defined
+                    //<-
+                    typename ::boost::mpl::if_<
+                        ::boost::detail::metafunction::is_container<T>
+                      , ::boost::detail::range_equal
+                      , ::std::equal_to<T>
+                    >::type
+                    //->
+                    type;
+        };
+    };
+
+    struct default_ordering_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            typedef // implementation_defined
+                    //<-
+                    typename ::boost::mpl::if_<
+                        ::boost::detail::metafunction::is_container<T>
+                      , ::boost::detail::range_less
+                      , ::std::less<T>
+                    >::type
+                    //->
+                    type;
+        };
+    };
+
+    struct boost_hash_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            typedef ::boost::hash<T> type;
+        };
+    };
+
+    struct tr1_hash_selector
+    {
+        template <typename T>
+        struct apply
+        {
+            typedef ::std::tr1::hash<T> type;
+        };
+    };
+
+    struct std_allocator_selector
+    {
+        template <typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<T2>
+                      , ::std::allocator<T1>
+                      , ::std::allocator< ::std::pair<T1 const,T2> >
+                    >::type
+                    type;
+        };
+    };
+
+    struct std_flat_allocator_selector
+    {
+        template <typename T1, typename T2 = void>
+        struct apply
+        {
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<T2>
+                      , ::std::allocator<T1>
+                      , ::std::allocator< ::std::pair<T1,T2> >
+                    >::type
+                    type;
+        };
+    };
+}  // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/ptr_container/clone_allocator.hpp>
+
+  //===========================================================================
+  // Selectors for the VertexList and EdgeList template parameters of
+  // adjacency_list, and the container_gen metafunction which is used
+  // to map the selectors to the container type used to implement the
+  // graph.
+  //===========================================================================
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <vector>
+#include <deque>
+#include <list>
+
+#if !defined BOOST_NO_SLIST
+#  if defined BOOST_SLIST_HEADER
+#    include BOOST_SLIST_HEADER
+#  else
+#    include <slist>
+#  endif
+#endif
+
+#if defined BOOST_HAS_HASH
+#  if defined BOOST_HASH_SET_HEADER
+#    include BOOST_HASH_SET_HEADER
+#  else
+#    include <hash_set>
+#  endif
+#  if defined BOOST_HASH_MAP_HEADER
+#    include BOOST_HASH_MAP_HEADER
+#  else
+#    include <hash_map>
+#  endif
+#endif
+
+#if !defined BOOST_MSVC
+#include <boost/array.hpp>
+#include <boost/tr1/array.hpp>
+#include <boost/ptr_container/ptr_array.hpp>
+#endif
+
+#include <set>
+#include <map>
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/ptr_container/ptr_unordered_map.hpp>
+
+#include <boost/mpl/apply_wrap.hpp>
+
+namespace boost {
+
+#if !defined BOOST_MSVC
+    struct array_selector_base
+    {
+    };
+
+    template <typename ConstantSize, typename IsTR1 = ::boost::mpl::false_>
+    struct array_selector : array_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef typename ::boost::mpl::if_<
+                        IsTR1
+                      , ::std::tr1::array<T,ConstantSize::value>
+                      , ::boost::array<T,ConstantSize::value>
+                    >::type
+                    type;
+        };
+    };
+#endif
+
+    struct vector_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct vector_selector : vector_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::std::vector<
+                        T
+                      , typename ::boost::mpl::apply_wrap1<
+                            AllocatorSelector
+                          , T
+                        >::type
+                    >
+                    type;
+        };
+    };
+
+    struct deque_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct deque_selector : deque_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::std::deque<
+                        T
+                      , typename ::boost::mpl::apply_wrap1<
+                            AllocatorSelector
+                          , T
+                        >::type
+                    >
+                    type;
+        };
+    };
+
+    struct list_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct list_selector : list_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::std::list<
+                        T
+                      , typename ::boost::mpl::apply_wrap1<
+                            AllocatorSelector
+                          , T
+                        >::type
+                    >
+                    type;
+        };
+    };
+
+#if !defined BOOST_NO_SLIST
+    struct slist_selector_base
+    {
+    };
+
+    template <typename AllocatorSelector = std_allocator_selector>
+    struct slist_selector : slist_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::BOOST_STD_EXTENSION_NAMESPACE::slist<
+                        T
+                      , typename ::boost::mpl::apply_wrap1<
+                            AllocatorSelector
+                          , T
+                        >::type
+                    >
+                    type;
+        };
+    };
+#endif
+
+    struct set_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct set_selector : set_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap2<
+                        AllocatorSelector
+                      , Key
+                      , Mapped
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::set<Key,comparator,allocator_type>
+                      , ::std::map<Key,Mapped,comparator,allocator_type>
+                    >::type
+                    type;
+        };
+    };
+
+    struct map_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct map_selector : map_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap2<
+                        AllocatorSelector
+                      , Key
+                      , Mapped
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::set<Key,comparator,allocator_type>
+                      , ::std::map<Key,Mapped,comparator,allocator_type>
+                    >::type
+                    type;
+        };
+    };
+
+    struct multiset_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct multiset_selector : multiset_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap2<
+                        AllocatorSelector
+                      , Key
+                      , Mapped
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::multiset<Key,comparator,allocator_type>
+                      , ::std::multimap<Key,Mapped,comparator,allocator_type>
+                    >::type
+                    type;
+        };
+    };
+
+    struct multimap_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct multimap_selector : multimap_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap2<
+                        AllocatorSelector
+                      , Key
+                      , Mapped
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::std::multiset<Key,comparator,allocator_type>
+                      , ::std::multimap<Key,Mapped,comparator,allocator_type>
+                    >::type
+                    type;
+        };
+    };
+
+#if defined BOOST_HAS_HASH
+    struct hash_set_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_set_selector : hash_set_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        HashSelector
+                      , Key
+                    >::type
+                    hasher;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , Key
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+                            Key
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+                            Key
+                          , Mapped
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct hash_map_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_map_selector : hash_map_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        HashSelector
+                      , Key
+                    >::type
+                    hasher;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , Key
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+                            Key
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+                            Key
+                          , Mapped
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct hash_multiset_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_multiset_selector : hash_multiset_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        HashSelector
+                      , Key
+                    >::type
+                    hasher;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , Key
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+                            Key
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+                            Key
+                          , Mapped
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct hash_multimap_selector_base
+    {
+    };
+
+    template <
+        typename Ignored = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_multimap_selector : hash_multimap_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        HashSelector
+                      , Key
+                    >::type
+                    hasher;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+            typedef typename ::boost::mpl::apply_wrap1<
+                        AllocatorSelector
+                      , Key
+                    >::type
+                    allocator_type;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+                            Key
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                      , ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+                            Key
+                          , Mapped
+                          , hasher
+                          , comparator
+                          , allocator_type
+                        >
+                    >::type
+                    type;
+        };
+    };
+#endif  // BOOST_HAS_HASH
+
+#if !defined BOOST_MSVC
+    struct ptr_array_selector_base
+    {
+    };
+
+    template <
+        typename ConstantSize
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+    >
+    struct ptr_array_selector : ptr_array_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::boost::ptr_array<
+                        T
+                      , ConstantSize::value
+                      , CloneAllocator
+                    >
+                    type;
+        };
+    };
+#endif
+
+    struct ptr_vector_selector_base
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_vector_selector : ptr_vector_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::boost::ptr_vector<T,CloneAllocator,Allocator> type;
+        };
+    };
+
+    struct ptr_deque_selector_base
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_deque_selector : ptr_deque_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::boost::ptr_deque<T,CloneAllocator,Allocator> type;
+        };
+    };
+
+    struct ptr_list_selector_base
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_list_selector : ptr_list_selector_base
+    {
+        template <typename T, typename Unused>
+        struct apply
+        {
+            typedef ::boost::ptr_list<T,CloneAllocator,Allocator> type;
+        };
+    };
+
+    struct ptr_set_selector_base
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_set_selector : ptr_set_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::ptr_set<
+                            Key
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                      , ::boost::ptr_map<
+                            Key
+                          , Mapped
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct ptr_map_selector_base
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_map_selector : ptr_map_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::ptr_set<
+                            Key
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                      , ::boost::ptr_map<
+                            Key
+                          , Mapped
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct ptr_multiset_selector_base
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_multiset_selector : ptr_multiset_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::ptr_multiset<
+                            Key
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                      , ::boost::ptr_multimap<
+                            Key
+                          , Mapped
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                    >::type
+                    type;
+        };
+    };
+
+    struct ptr_multimap_selector_base
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_multimap_selector : ptr_multimap_selector_base
+    {
+        template <typename Key, typename Mapped>
+        struct apply
+        {
+         private:
+            typedef typename ::boost::mpl::apply_wrap1<
+                        CompareSelector
+                      , Key
+                    >::type
+                    comparator;
+
+         public:
+            typedef typename ::boost::mpl::if_<
+                        ::std::tr1::is_void<Mapped>
+                      , ::boost::ptr_multiset<
+                            Key
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                      , ::boost::ptr_multimap<
+                            Key
+                          , Mapped
+                          , comparator
+                          , CloneAllocator
+                          , Allocator
+                        >
+                    >::type
+                    type;
+        };
+    };
+}  // namespace boost
+
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__container_selector_templates
+namespace boost {
+
+    template <typename ConstantSize, typename IsTR1 = ::boost::mpl::false_>
+    struct array_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct vector_selector
+    {
+    };
+
+    template <typename AllocatorSelector = std_allocator_selector>
+    struct stable_vector_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct deque_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct list_selector
+    {
+    };
+
+    template <typename AllocatorSelector = std_allocator_selector>
+    struct slist_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct set_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct map_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct multiset_selector
+    {
+    };
+
+    template <
+        typename IsBoost = ::boost::mpl::false_
+      , typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct multimap_selector
+    {
+    };
+
+    template <
+        typename IsTR1 = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_set_selector
+    {
+    };
+
+    template <
+        typename IsTR1 = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_map_selector
+    {
+    };
+
+    template <
+        typename IsTR1 = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_multiset_selector
+    {
+    };
+
+    template <
+        typename IsTR1 = ::boost::mpl::false_
+      , typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename AllocatorSelector = std_allocator_selector
+    >
+    struct hash_multimap_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_flat_allocator_selector
+    >
+    struct flat_set_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_flat_allocator_selector
+    >
+    struct flat_map_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_flat_allocator_selector
+    >
+    struct flat_multiset_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename AllocatorSelector = std_flat_allocator_selector
+    >
+    struct flat_multimap_selector
+    {
+    };
+
+    template <
+        typename ConstantSize
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+    >
+    struct ptr_array_selector
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_vector_selector
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_deque_selector
+    {
+    };
+
+    template <
+        typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_list_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_set_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_map_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_multiset_selector
+    {
+    };
+
+    template <
+        typename CompareSelector = default_ordering_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_multimap_selector
+    {
+    };
+
+    template <
+        typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_hash_set_selector
+    {
+    };
+
+    template <
+        typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_hash_map_selector
+    {
+    };
+
+    template <
+        typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_hash_multiset_selector
+    {
+    };
+
+    template <
+        typename HashSelector = boost_hash_selector
+      , typename CompareSelector = default_equivalence_selector
+      , typename CloneAllocator = ::boost::heap_clone_allocator
+      , typename Allocator = ::std::allocator<void*>
+    >
+    struct ptr_hash_multimap_selector
+    {
+    };
+}  // namespace boost
+//]
+
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//[reference__container_selector_typedefs
+namespace boost {
+
+    typedef vector_selector<> vecS;
+    typedef deque_selector<> dequeS;
+    typedef list_selector<> listS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+//->
+    typedef slist_selector<> slistS;
+//<-
+#endif
+//->
+    typedef set_selector<> setS;
+    typedef map_selector<> mapS;
+    typedef multiset_selector<> multisetS;
+    typedef multimap_selector<> multimapS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+//->
+    typedef hash_set_selector<> hash_setS;
+    typedef hash_map_selector<> hash_mapS;
+    typedef hash_multiset_selector<> hash_multisetS;
+    typedef hash_multimap_selector<> hash_multimapS;
+//<-
+#endif
+//->
+    typedef ptr_vector_selector<> ptr_vecS;
+    typedef ptr_deque_selector<> ptr_dequeS;
+    typedef ptr_list_selector<> ptr_listS;
+    typedef ptr_set_selector<> ptr_setS;
+    typedef ptr_map_selector<> ptr_mapS;
+    typedef ptr_multiset_selector<> ptr_multisetS;
+    typedef ptr_multimap_selector<> ptr_multimapS;
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//->
+    typedef ptr_hash_set_selector<> ptr_hash_setS;
+    typedef ptr_hash_map_selector<> ptr_hash_mapS;
+    typedef ptr_hash_multiset_selector<> ptr_hash_multisetS;
+    typedef ptr_hash_multimap_selector<> ptr_hash_multimapS;
+    typedef stable_vector_selector<> stable_vecS;
+    typedef flat_set_selector<> flat_setS;
+    typedef flat_map_selector<> flat_mapS;
+    typedef flat_multiset_selector<> flat_multisetS;
+    typedef flat_multimap_selector<> flat_multimapS;
+//<-
+#endif
+//->
+}  // namespace boost
+//]
+
+#endif  // BOOST_CONTAINER_GEN_SELECTORS_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/container_gen/selectors_typeof.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/selectors_typeof.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,178 @@
+//=======================================================================
+// 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_CONTAINER_GEN_SELECTORS_TYPEOF_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SELECTORS_TYPEOF_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/mpl/bool.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(::boost::default_equivalence_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::default_ordering_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::boost_hash_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tr1_hash_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::std_allocator_selector);
+BOOST_TYPEOF_REGISTER_TYPE(::boost::std_flat_allocator_selector);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::vector_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::vector_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::vector_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::vecS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::deque_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::deque_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::deque_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::dequeS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::list_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::list_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::list_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::listS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::set_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::set_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::set_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::set_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::setS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::map_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::map_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::map_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::map_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::mapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multiset_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multiset_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multiset_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multiset_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::multisetS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multimap_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multimap_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multimap_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::multimap_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::multimapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_vecS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_dequeS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_listS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_setS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_mapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_multisetS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap_selector, 3)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_multimapS);
+
+#if !defined BOOST_MSVC
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::array_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::array_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_array_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_array_selector, 2)
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::slist_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::slist_selector, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::slistS);
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_set_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_set_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_set_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_set_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_set_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::hash_setS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_map_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_map_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_map_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_map_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_map_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::hash_mapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multiset_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multiset_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multiset_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multiset_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multiset_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::hash_multisetS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multimap_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multimap_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multimap_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multimap_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash_multimap_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::hash_multimapS);
+#endif  // supports partial specialization or has SGI hash
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::stable_vector_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::stable_vector_selector, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::stable_vecS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_set_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_set_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_set_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::flat_setS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_map_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_map_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_map_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::flat_mapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multiset_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multiset_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multiset_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::flat_multisetS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multimap_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multimap_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::flat_multimap_selector, 2)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::flat_multimapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_set_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_set_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_set_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_set_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_set_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_hash_setS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_map_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_map_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_map_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_map_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_map_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_hash_mapS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multiset_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multiset_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multiset_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multiset_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multiset_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_hash_multisetS);
+//BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multimap_selector, 0)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multimap_selector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multimap_selector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multimap_selector, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_hash_multimap_selector, 4)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ptr_hash_multimapS);
+#endif  // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_CONTAINER_GEN_SELECTORS_TYPEOF_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/function/get_reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/function/get_reference.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,23 @@
+// 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_DETAIL_FUNCTION_GET_REFERENCE_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_GET_REFERENCE_HPP_INCLUDED
+
+#include <boost/typeof/boost/optional.hpp>
+
+namespace boost { namespace detail {
+
+    // Allows a BOOST_TYPEOF or BOOST_TYPEOF_TPL expression to obtain a
+    // reference to T without requiring T to be DefaultConstructible.
+    template <typename T>
+    T& get_reference()
+    {
+        return ::boost::optional<T>().get();
+    }
+}}  // namespace boost::detail
+
+#endif  // BOOST_DETAIL_FUNCTION_GET_REFERENCE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/function/range_equal.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/function/range_equal.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,26 @@
+// 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_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+
+#include <boost/range/algorithm/equal.hpp>
+
+namespace boost { namespace detail {
+
+    struct range_equal
+    {
+        typedef bool result_type;
+
+        template <typename R1, typename R2>
+        inline result_type operator()(R1 const& r1, R2 const& r2) const
+        {
+            return ::boost::range::equal(r1, r2);
+        }
+    };
+}}  // namespace boost::detail
+
+#endif  // BOOST_DETAIL_FUNCTION_RANGE_EQUAL_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/function/range_less.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/function/range_less.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,26 @@
+// 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_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+#define BOOST_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+
+#include <boost/range/algorithm/lexicographical_compare.hpp>
+
+namespace boost { namespace detail {
+
+    struct range_less
+    {
+        typedef bool result_type;
+
+        template <typename R1, typename R2>
+        inline result_type operator()(R1 const& r1, R2 const& r2) const
+        {
+            return ::boost::range::lexicographical_compare(r1, r2);
+        }
+    };
+}}  // namespace boost::detail
+
+#endif  // BOOST_DETAIL_FUNCTION_RANGE_LESS_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_auto_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_auto_type metafunction will determine whether or not the
+    // specified type has a nested 'auto_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(auto_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_AUTO_TYPE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_const_iterator metafunction will determine whether or not the
+    // specified type has a nested 'const_iterator' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_CONST_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_pointer.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_const_pointer metafunction will determine whether or not the
+    // specified type has a nested 'const_pointer' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(const_pointer)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_CONST_POINTER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_const_reference.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_const_reference metafunction will determine whether or not the
+    // specified type has a nested 'const_reference' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(const_reference)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_CONST_REFERENCE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_difference_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_difference_type metafunction will determine whether or not the
+    // specified type has a nested 'difference_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_DIFFERENCE_TYPE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_hasher.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_hasher metafunction will determine whether or not the
+    // specified type has a nested 'hasher' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(hasher)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_HASHER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_iterator metafunction will determine whether or not the
+    // specified type has a nested 'iterator' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_iterator_category.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_iterator_category metafunction will determine whether or not the
+    // specified type has a nested 'iterator_category' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_ITERATOR_CATEGORY_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_key_compare.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_key_compare metafunction will determine whether or not the
+    // specified type has a nested 'key_compare' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(key_compare)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_KEY_COMPARE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_key_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2007-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_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_key_type metafunction will determine whether or not the
+    // specified type has a nested 'key_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(key_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_KEY_TYPE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_pointer.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_pointer metafunction will determine whether or not the
+    // specified type has a nested 'pointer' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_POINTER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_reference.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_reference metafunction will determine whether or not the
+    // specified type has a nested 'reference' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_REFERENCE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_size_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_size_type metafunction will determine whether or not the
+    // specified type has a nested 'size_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(size_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_SIZE_TYPE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_stable_iterators.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,60 @@
+// 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_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_hashed_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct has_stable_iterators_impl
+      : ::boost::mpl::eval_if<
+            is_random_access_iterator<typename T::iterator>
+          , ::boost::mpl::false_
+          , ::boost::mpl::not_<is_hashed_associative_container<T> >
+        >
+    {
+    };
+
+    template <typename T>
+    struct has_stable_iterators
+      : ::boost::mpl::eval_if<
+            is_container<T>
+          , has_stable_iterators_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_stable_iterators,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/container/stable_vector.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename ValueType, typename Allocator>
+    struct has_stable_iterators<
+        ::boost::container::stable_vector<ValueType,Allocator>
+    > : ::boost::mpl::true_
+    {
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_STABLE_ITERATORS_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_value_compare.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_value_compare metafunction will determine whether or not the
+    // specified type has a nested 'value_compare' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(value_compare)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_VALUE_COMPARE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/has_value_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// Copyright (C) 2007-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_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_value_type metafunction will determine whether or not the
+    // specified type has a nested 'value_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_VALUE_TYPE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_associative_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,30 @@
+// 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_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_key_type.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_associative_container
+      : ::boost::mpl::if_<
+            typename has_key_type<T>::type
+          , is_container<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_ASSOCIATIVE_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_back_insertion_sequence.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,50 @@
+// 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_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/is_sequence.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // Major assumption:
+    // A Back Insertion Sequence is a Sequence with Bidirectional Iterators.
+    template <typename T>
+    struct is_back_insertion_sequence_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_convertible<
+                typename ::boost::BOOST_ITERATOR_CATEGORY<
+                    typename T::iterator
+                >::type
+              , ::std::bidirectional_iterator_tag
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_back_insertion_sequence
+      : ::boost::mpl::eval_if<
+            is_sequence<T>
+          , is_back_insertion_sequence_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_back_insertion_sequence,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_BACK_INSERTION_SEQUENCE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,65 @@
+// 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_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_value_type.hpp>
+#include <boost/detail/metafunction/has_difference_type.hpp>
+#include <boost/detail/metafunction/has_size_type.hpp>
+#include <boost/detail/metafunction/has_iterator.hpp>
+#include <boost/detail/metafunction/has_const_iterator.hpp>
+#include <boost/detail/metafunction/has_pointer.hpp>
+#include <boost/detail/metafunction/has_const_pointer.hpp>
+#include <boost/detail/metafunction/has_reference.hpp>
+#include <boost/detail/metafunction/has_const_reference.hpp>
+#include <boost/detail/metafunction/is_input_iterator.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct has_container_typedefs
+      : ::boost::mpl::and_<
+            ::boost::mpl::and_<
+                typename has_value_type<T>::type
+              , typename has_difference_type<T>::type
+              , typename has_size_type<T>::type
+              , typename has_iterator<T>::type
+              , typename has_const_iterator<T>::type
+            >
+          , ::boost::mpl::and_<
+                typename has_reference<T>::type
+              , typename has_const_reference<T>::type
+//              , typename has_pointer<T>::type
+//              , typename has_const_pointer<T>::type
+            >
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_container_impl
+      : is_input_iterator<typename T::const_iterator>::type
+    {
+    };
+
+    template <typename T>
+    struct is_container
+      : ::boost::mpl::if_<
+            has_container_typedefs<T>
+          , is_container_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_flat_assoc_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,37 @@
+// 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_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_sorted_assoc_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_flat_associative_container_impl
+      : is_random_access_iterator<typename T::iterator>
+    {
+    };
+
+    template <typename T>
+    struct is_flat_associative_container
+      : ::boost::mpl::if_<
+            is_sorted_associative_container<T>
+          , is_flat_associative_container_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_flat_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_FLAT_ASSOC_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_hashed_assoc_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,42 @@
+// 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_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/detail/metafunction/has_hasher.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_hashed_associative_container_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_void<typename T::hasher>
+          , ::boost::mpl::false_
+          , is_associative_container<T>
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_hashed_associative_container
+      : ::boost::mpl::eval_if<
+            typename has_hasher<T>::type
+          , is_hashed_associative_container_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_hashed_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_HASHED_ASSOC_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_input_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+// 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_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_input_iterator_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_convertible<
+                typename ::boost::BOOST_ITERATOR_CATEGORY<T>::type
+              , ::std::input_iterator_tag
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_input_iterator
+      : ::boost::mpl::eval_if<
+            typename has_iterator_category< ::std::iterator_traits<T> >::type
+          , is_input_iterator_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_input_iterator,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_INPUT_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_multi_assoc_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,73 @@
+// 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_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/detail/function/get_reference.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_multiple_associative_container_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_same<
+                BOOST_TYPEOF_TPL(
+                    T().insert(
+                        ::boost::detail::get_reference<typename T::key_type>()
+                    )
+                )
+              , typename T::iterator
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename T>
+    struct is_multiple_associative_ptr_container_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_same<
+                BOOST_TYPEOF_TPL(
+                    T().insert(
+                        &::boost::detail::get_reference<typename T::key_type>()
+                    )
+                )
+              , typename T::iterator
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename T>
+    struct is_multiple_associative_container
+      : ::boost::mpl::eval_if<
+            is_associative_container<T>
+          , ::boost::mpl::if_<
+                is_ptr_container<T>
+              , is_multiple_associative_ptr_container_impl<T>
+              , is_multiple_associative_container_impl<T>
+            >
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_multiple_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_MULTI_ASSOC_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_ptr_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,30 @@
+// 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_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_auto_type.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_ptr_container
+      : ::boost::mpl::if_<
+            typename has_auto_type<T>::type
+          , is_container<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_ptr_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_PTR_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_random_access_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,45 @@
+// 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_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/is_random_access_iterator.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // Major assumption:
+    // All Random Access Containers sport Random Access Iterators and
+    // are not Associative Containers.
+    template <typename T>
+    struct is_random_access_container_impl
+      : ::boost::mpl::and_<
+            is_random_access_iterator<typename T::iterator>
+          , ::boost::mpl::not_< is_associative_container<T> >
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_random_access_container
+      : ::boost::mpl::if_<
+            typename is_container<T>::type
+          , is_random_access_container_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_random_access_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+// 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_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_random_access_iterator_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_convertible<
+                typename ::boost::BOOST_ITERATOR_CATEGORY<T>::type
+              , ::std::random_access_iterator_tag
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_random_access_iterator
+      : ::boost::mpl::eval_if<
+            typename has_iterator_category< ::std::iterator_traits<T> >::type
+          , is_random_access_iterator_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_random_access_iterator,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_RANDOM_ACCESS_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_sequence.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+// 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_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_iterator_category.hpp>
+#include <boost/detail/metafunction/is_container.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // Major assumption:
+    // A Sequence is a Container that is neither Associative
+    // nor with an Iterator that is a raw pointer (e.g. boost::array).
+    template <typename T>
+    struct is_sequence_impl
+      : ::boost::mpl::if_<
+            typename has_iterator_category< typename T::iterator >::type
+          , ::boost::mpl::not_<is_associative_container<T> >
+          , ::boost::mpl::false_
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_sequence
+      : ::boost::mpl::eval_if<
+            is_container<T>
+          , is_sequence_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_sequence,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_SEQUENCE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_sorted_assoc_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/detail/metafunction/has_key_compare.hpp>
+#include <boost/detail/metafunction/has_value_compare.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_sorted_associative_container
+      : ::boost::mpl::if_<
+            ::boost::mpl::and_<
+                typename has_key_compare<T>::type
+              , typename has_value_compare<T>::type
+            >
+          , is_associative_container<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_sorted_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_SORTED_ASSOC_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/detail/metafunction/is_unique_assoc_container.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,73 @@
+// 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_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+
+#include <utility>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/detail/function/get_reference.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_ptr_container.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct is_unique_associative_container_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_same<
+                BOOST_TYPEOF_TPL(
+                    T().insert(
+                        ::boost::detail::get_reference<typename T::key_type>()
+                    )
+                )
+              , ::std::pair<typename T::iterator,bool>
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename T>
+    struct is_unique_associative_ptr_container_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_same<
+                BOOST_TYPEOF_TPL(
+                    T().insert(
+                        &::boost::detail::get_reference<typename T::key_type>()
+                    )
+                )
+              , ::std::pair<typename T::iterator,bool>
+            >
+          , ::boost::mpl::true_
+          , ::boost::mpl::false_
+        >::type
+    {
+    };
+
+    template <typename T>
+    struct is_unique_associative_container
+      : ::boost::mpl::eval_if<
+            is_associative_container<T>
+          , ::boost::mpl::if_<
+                is_ptr_container<T>
+              , is_unique_associative_ptr_container_impl<T>
+              , is_unique_associative_container_impl<T>
+            >
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_unique_associative_container,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_IS_UNIQUE_ASSOC_CONTAINER_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/graph/adjacency_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/graph/adjacency_list.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,380 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+//
+// 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_GRAPH_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_ADJACENCY_LIST_HPP
+
+#include <boost/config.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_mutability_traits.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/graph/detail/edge.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/named_graph.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+
+namespace boost {
+
+  template <typename StorageSelector>
+  struct parallel_edge_traits
+  {
+    typedef typename mpl::if_<is_unique_associative_selector<StorageSelector>,
+      disallow_parallel_edge_tag,allow_parallel_edge_tag
+    >::type type;
+  };
+
+  //===========================================================================
+  // The adjacency_list_traits class, which provides a way to access
+  // some of the associated types of an adjacency_list type without
+  // having to first create the adjacency_list type. This is useful
+  // when trying to create interior vertex or edge properties who's
+  // value type is a vertex or edge descriptor.
+
+  template <class OutEdgeListS = vecS,
+            class VertexListS = vecS,
+            class DirectedS = directedS,
+            class EdgeListS = listS>
+  struct adjacency_list_traits
+  {
+    typedef typename mpl::and_<
+        is_random_access_selector<VertexListS>
+      , mpl::not_<is_associative_selector<VertexListS> >
+    >::type is_rand_access;
+    typedef typename DirectedS::is_bidir_t is_bidir;
+    typedef typename DirectedS::is_directed_t is_directed;
+
+    typedef typename mpl::if_<is_bidir,
+      bidirectional_tag,
+      typename mpl::if_<is_directed,
+        directed_tag, undirected_tag
+      >::type
+    >::type directed_category;
+
+    typedef typename parallel_edge_traits<OutEdgeListS>::type
+      edge_parallel_category;
+
+    typedef std::size_t vertices_size_type;
+    typedef void* vertex_ptr;
+    typedef typename mpl::if_<is_rand_access,
+      vertices_size_type, vertex_ptr>::type vertex_descriptor;
+    typedef detail::edge_desc_impl<directed_category, vertex_descriptor>
+      edge_descriptor;
+
+  private:
+    // Logic to figure out the edges_size_type
+    struct dummy {};
+    typedef typename container_gen<EdgeListS, dummy>::type EdgeContainer;
+    typedef typename DirectedS::is_bidir_t BidirectionalT;
+    typedef typename DirectedS::is_directed_t DirectedT;
+    typedef typename mpl::and_<DirectedT,
+      typename mpl::not_<BidirectionalT>::type >::type on_edge_storage;
+  public:
+    typedef typename mpl::if_<on_edge_storage,
+       std::size_t, typename EdgeContainer::size_type
+    >::type edges_size_type;
+
+  };
+
+} // namespace boost
+
+#include <boost/graph/detail/adjacency_list.hpp>
+
+namespace boost {
+
+  //===========================================================================
+  // The adjacency_list class.
+  //
+
+  template <class OutEdgeListS = vecS, // a Sequence or an AssociativeContainer
+            class VertexListS = vecS, // a Sequence or a RandomAccessContainer
+            class DirectedS = directedS,
+            class VertexProperty = no_property,
+            class EdgeProperty = no_property,
+            class GraphProperty = no_property,
+            class EdgeListS = listS>
+  class adjacency_list
+    : public detail::adj_list_gen<
+      adjacency_list<OutEdgeListS,VertexListS,DirectedS,
+                     VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
+      VertexListS, OutEdgeListS, DirectedS,
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+      typename detail::retag_property_list<vertex_bundle_t,
+                                           VertexProperty>::type,
+      typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::type,
+#else
+      VertexProperty, EdgeProperty,
+#endif
+      GraphProperty, EdgeListS>::type,
+      // Support for named vertices
+      public graph::maybe_named_graph<
+        adjacency_list<OutEdgeListS,VertexListS,DirectedS,
+                       VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
+        typename adjacency_list_traits<OutEdgeListS, VertexListS, DirectedS,
+                                       EdgeListS>::vertex_descriptor,
+        VertexProperty>
+  {
+      public:
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+    typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+    typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
+
+    typedef typename graph_detail::vertex_prop<VertexProperty>::property vertex_property_type;
+    typedef typename graph_detail::vertex_prop<VertexProperty>::bundle vertex_bundled;
+
+    typedef typename graph_detail::edge_prop<EdgeProperty>::property edge_property_type;
+    typedef typename graph_detail::edge_prop<EdgeProperty>::bundle edge_bundled;
+#else
+    typedef GraphProperty graph_property_type;
+    typedef no_graph_bundle graph_bundled;
+
+    typedef VertexProperty vertex_property_type;
+    typedef no_vertex_bundle vertex_bundled;
+
+    typedef EdgeProperty edge_property_type;
+    typedef no_edge_bundle edge_bundled;
+#endif
+
+  private:
+    typedef adjacency_list self;
+    typedef typename detail::adj_list_gen<
+      self, VertexListS, OutEdgeListS, DirectedS,
+      vertex_property_type, edge_property_type, GraphProperty, EdgeListS
+    >::type Base;
+
+  public:
+    typedef typename Base::stored_vertex stored_vertex;
+    typedef typename Base::vertices_size_type vertices_size_type;
+    typedef typename Base::edges_size_type edges_size_type;
+    typedef typename Base::degree_size_type degree_size_type;
+    typedef typename Base::vertex_descriptor vertex_descriptor;
+    typedef typename Base::edge_descriptor edge_descriptor;
+    typedef OutEdgeListS out_edge_list_selector;
+    typedef VertexListS vertex_list_selector;
+    typedef DirectedS directed_selector;
+    typedef EdgeListS edge_list_selector;
+
+
+    adjacency_list(const GraphProperty& p = GraphProperty())
+      : m_property(new graph_property_type(p))
+    { }
+
+    adjacency_list(const adjacency_list& x)
+      : Base(x), m_property(new graph_property_type(*x.m_property))
+    { }
+
+    adjacency_list& operator=(const adjacency_list& x) {
+      // TBD: probably should give the strong guarantee
+      if (&x != this) {
+        Base::operator=(x);
+
+        // Copy/swap the ptr since we can't just assign it...
+        property_ptr p(new graph_property_type(*x.m_property));
+        m_property.swap(p);
+      }
+      return *this;
+    }
+
+    // Required by Mutable Graph
+    adjacency_list(vertices_size_type num_vertices,
+                          const GraphProperty& p = GraphProperty())
+      : Base(num_vertices), m_property(new graph_property_type(p))
+    { }
+
+#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+    // Required by Iterator Constructible Graph
+    template <class EdgeIterator>
+    adjacency_list(EdgeIterator first, EdgeIterator last,
+                          vertices_size_type n,
+                          edges_size_type = 0,
+                          const GraphProperty& p = GraphProperty())
+      : Base(n, first, last), m_property(new graph_property_type(p))
+    { }
+
+    template <class EdgeIterator, class EdgePropertyIterator>
+    adjacency_list(EdgeIterator first, EdgeIterator last,
+                          EdgePropertyIterator ep_iter,
+                          vertices_size_type n,
+                          edges_size_type = 0,
+                          const GraphProperty& p = GraphProperty())
+      : Base(n, first, last, ep_iter), m_property(new graph_property_type(p))
+    { }
+#endif
+
+    void swap(adjacency_list& x) {
+      // Is there a more efficient way to do this?
+      adjacency_list tmp(x);
+      x = *this;
+      *this = tmp;
+    }
+
+    void clear()
+    {
+      this->clearing_graph();
+      Base::clear();
+    }
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+    // Directly access a vertex or edge bundle
+    vertex_bundled& operator[](vertex_descriptor v)
+    { return get(vertex_bundle, *this)[v]; }
+
+    const vertex_bundled& operator[](vertex_descriptor v) const
+    { return get(vertex_bundle, *this)[v]; }
+
+    edge_bundled& operator[](edge_descriptor e)
+    { return get(edge_bundle, *this)[e]; }
+
+    const edge_bundled& operator[](edge_descriptor e) const
+    { return get(edge_bundle, *this)[e]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
+#endif
+
+    //  protected:  (would be protected if friends were more portable)
+    typedef scoped_ptr<graph_property_type> property_ptr;
+    property_ptr  m_property;
+  };
+
+#define ADJLIST_PARAMS \
+    typename OEL, typename VL, typename D, typename VP, typename EP, \
+    typename GP, typename EL
+#define ADJLIST adjacency_list<OEL,VL,D,VP,EP,GP,EL>
+
+  template<ADJLIST_PARAMS, typename Tag, typename Value>
+  inline void set_property(ADJLIST& g, Tag, Value const& value) {
+    get_property_value(*g.m_property, Tag()) = value;
+  }
+
+  template<ADJLIST_PARAMS, typename Tag>
+  inline typename graph_property<ADJLIST, Tag>::type&
+  get_property(ADJLIST& g, Tag) {
+    return get_property_value(*g.m_property, Tag());
+  }
+
+  template<ADJLIST_PARAMS, typename Tag>
+  inline typename graph_property<ADJLIST, Tag>::type const&
+  get_property(ADJLIST const& g, Tag) {
+    return get_property_value(*g.m_property, Tag());
+  }
+
+  // dwa 09/25/00 - needed to be more explicit so reverse_graph would work.
+  template <class Directed, class Vertex,
+      class OutEdgeListS,
+      class VertexListS,
+      class DirectedS,
+      class VertexProperty,
+      class EdgeProperty,
+      class GraphProperty, class EdgeListS>
+  inline Vertex
+  source(const detail::edge_base<Directed,Vertex>& e,
+         const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+                 VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+  {
+    return e.m_source;
+  }
+
+  template <class Directed, class Vertex, class OutEdgeListS,
+      class VertexListS, class DirectedS, class VertexProperty,
+      class EdgeProperty, class GraphProperty, class EdgeListS>
+  inline Vertex
+  target(const detail::edge_base<Directed,Vertex>& e,
+         const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+              VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+  {
+    return e.m_target;
+  }
+
+  // Support for bundled properties
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+  template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+           typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle>
+  inline
+  typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                       GraphProperty, EdgeListS>, T Bundle::*>::type
+  get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                    GraphProperty, EdgeListS>& g)
+  {
+    typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+                                                 EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::type
+      result_type;
+    return result_type(&g, p);
+  }
+
+  template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+           typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle>
+  inline
+  typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                       GraphProperty, EdgeListS>, T Bundle::*>::const_type
+  get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                    GraphProperty, EdgeListS> const & g)
+  {
+    typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+                                                 EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::const_type
+      result_type;
+    return result_type(&g, p);
+  }
+
+  template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+           typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle,
+           typename Key>
+  inline T
+  get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                    GraphProperty, EdgeListS> const & g, const Key& key)
+  {
+    return get(get(p, g), key);
+  }
+
+  template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+           typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle,
+           typename Key>
+  inline void
+  put(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+                                    GraphProperty, EdgeListS>& g, const Key& key, const T& value)
+  {
+    put(get(p, g), key, value);
+  }
+
+#endif
+
+// Mutability Traits
+template <ADJLIST_PARAMS>
+struct graph_mutability_traits<ADJLIST> {
+    typedef mutable_property_graph_tag category;
+};
+
+// Can't remove vertices from adjacency lists with VL==vecS
+template <typename OEL, typename D, typename VP, typename EP, typename GP, typename EL>
+struct graph_mutability_traits< adjacency_list<OEL,vecS,D,VP,EP,GP,EL> > {
+    typedef add_only_property_graph_tag category;
+};
+#undef ADJLIST_PARAMS
+#undef ADJLIST
+
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_ADJACENCY_LIST_HPP
Added: sandbox/container_gen/boost/graph/detail/adjacency_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/graph/detail/adjacency_list.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,2846 @@
+// -*- c++ -*-
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+//
+// 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_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+
+#include <map> // for vertex_map in copy_impl
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/operators.hpp>
+#include <boost/property_map/property_map.hpp>
+#include <boost/range/irange.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <memory>
+#include <algorithm>
+#include <boost/limits.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/pending/container_traits.hpp>
+#include <boost/graph/detail/adj_list_edge_iterator.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/property.hpp>
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+// Symbol truncation problems with MSVC, trying to shorten names.
+#define stored_edge se_
+#define stored_edge_property sep_
+#define stored_edge_iter sei_
+
+/*
+  Outline for this file:
+
+  out_edge_iterator and in_edge_iterator implementation
+  edge_iterator for undirected graph
+  stored edge types (these object live in the out-edge/in-edge lists)
+  directed edges helper class
+  directed graph helper class
+  undirected graph helper class
+  bidirectional graph helper class
+  bidirectional graph helper class (without edge properties)
+  bidirectional graph helper class (with edge properties)
+  adjacency_list helper class
+  adj_list_impl class
+  vec_adj_list_impl class
+  adj_list_gen class
+  vertex property map
+  edge property map
+
+
+  Note: it would be nice to merge some of the undirected and
+  bidirectional code... it is awful similar.
+ */
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of the concept checking class
+# define Graph Graph_
+#endif
+
+namespace boost {
+
+  namespace detail {
+
+    template <typename DirectedS>
+    struct directed_category_traits {
+      typedef directed_tag directed_category;
+    };
+
+    template <>
+    struct directed_category_traits<directedS> {
+      typedef directed_tag directed_category;
+    };
+    template <>
+    struct directed_category_traits<undirectedS> {
+      typedef undirected_tag directed_category;
+    };
+    template <>
+    struct directed_category_traits<bidirectionalS> {
+      typedef bidirectional_tag directed_category;
+    };
+
+    template <class Vertex>
+    struct target_is {
+      target_is(const Vertex& v) : m_target(v) { }
+      template <class StoredEdge>
+      bool operator()(const StoredEdge& e) const {
+        return e.get_target() == m_target;
+      }
+      Vertex m_target;
+    };
+
+    // O(E/V)
+    template <class EdgeList, class vertex_descriptor>
+    void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+                                   allow_parallel_edge_tag)
+    {
+      boost::graph_detail::erase_if(el, detail::target_is<vertex_descriptor>(v));
+    }
+    // O(log(E/V))
+    template <class EdgeList, class vertex_descriptor>
+    void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+                                   disallow_parallel_edge_tag)
+    {
+      typedef typename EdgeList::value_type StoredEdge;
+      el.erase(StoredEdge(v));
+    }
+
+    //=========================================================================
+    // Out-Edge and In-Edge Iterator Implementation
+
+    template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+    struct out_edge_iter
+      : iterator_adaptor<
+            out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+          , BaseIter
+          , EdgeDescriptor
+          , use_default
+          , EdgeDescriptor
+          , Difference
+        >
+    {
+      typedef iterator_adaptor<
+          out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+        , BaseIter
+        , EdgeDescriptor
+        , use_default
+        , EdgeDescriptor
+        , Difference
+      > super_t;
+
+      inline out_edge_iter() { }
+        inline out_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+          : super_t(i), m_src(src) { }
+
+      inline EdgeDescriptor
+      dereference() const
+      {
+        return EdgeDescriptor(m_src, (*this->base()).get_target(),
+                              &(*this->base()).get_property());
+      }
+      VertexDescriptor m_src;
+    };
+
+    template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+    struct in_edge_iter
+      : iterator_adaptor<
+            in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+          , BaseIter
+          , EdgeDescriptor
+          , use_default
+          , EdgeDescriptor
+          , Difference
+        >
+    {
+      typedef iterator_adaptor<
+          in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+        , BaseIter
+        , EdgeDescriptor
+        , use_default
+        , EdgeDescriptor
+        , Difference
+      > super_t;
+
+      inline in_edge_iter() { }
+      inline in_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+        : super_t(i), m_src(src) { }
+
+      inline EdgeDescriptor
+      dereference() const
+      {
+        return EdgeDescriptor((*this->base()).get_target(), m_src,
+                              &this->base()->get_property());
+      }
+      VertexDescriptor m_src;
+    };
+
+    //=========================================================================
+    // Undirected Edge Iterator Implementation
+
+    template <class EdgeIter, class EdgeDescriptor, class Difference>
+    struct undirected_edge_iter
+      : iterator_adaptor<
+            undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+          , EdgeIter
+          , EdgeDescriptor
+          , use_default
+          , EdgeDescriptor
+          , Difference
+        >
+    {
+      typedef iterator_adaptor<
+          undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+        , EdgeIter
+        , EdgeDescriptor
+        , use_default
+        , EdgeDescriptor
+        , Difference
+      > super_t;
+
+      undirected_edge_iter() {}
+
+      explicit undirected_edge_iter(EdgeIter i)
+          : super_t(i) {}
+
+      inline EdgeDescriptor
+      dereference() const {
+        return EdgeDescriptor(
+            (*this->base()).m_source
+          , (*this->base()).m_target
+          , &this->base()->get_property());
+      }
+    };
+
+    //=========================================================================
+    // Edge Storage Types (stored in the out-edge/in-edge lists)
+
+    template <class Vertex>
+    class stored_edge
+      : public boost::equality_comparable1< stored_edge<Vertex>,
+        boost::less_than_comparable1< stored_edge<Vertex> > >
+    {
+    public:
+      typedef no_property property_type;
+      inline stored_edge() { }
+      inline stored_edge(Vertex target, const no_property& = no_property())
+        : m_target(target) { }
+      // Need to write this explicitly so stored_edge_property can
+      // invoke Base::operator= (at least, for SGI MIPSPro compiler)
+      inline stored_edge& operator=(const stored_edge& x) {
+        m_target = x.m_target;
+        return *this;
+      }
+      inline Vertex& get_target() const { return m_target; }
+      inline const no_property& get_property() const { return s_prop; }
+      inline bool operator==(const stored_edge& x) const
+        { return m_target == x.get_target(); }
+      inline bool operator<(const stored_edge& x) const
+        { return m_target < x.get_target(); }
+      //protected: need to add hash<> as a friend
+      static no_property s_prop;
+      // Sometimes target not used as key in the set, and in that case
+      // it is ok to change the target.
+      mutable Vertex m_target;
+    };
+    template <class Vertex>
+    no_property stored_edge<Vertex>::s_prop;
+
+    template <class Vertex, class Property>
+    class stored_edge_property : public stored_edge<Vertex> {
+      typedef stored_edge_property self;
+      typedef stored_edge<Vertex> Base;
+    public:
+      typedef Property property_type;
+      inline stored_edge_property() { }
+      inline stored_edge_property(Vertex target,
+                                  const Property& p = Property())
+        : stored_edge<Vertex>(target), m_property(new Property(p)) { }
+      stored_edge_property(const self& x)
+        : Base(x), m_property(const_cast<self&>(x).m_property) { }
+      self& operator=(const self& x) {
+        Base::operator=(x);
+        m_property = const_cast<self&>(x).m_property;
+        return *this;
+      }
+      inline Property& get_property() { return *m_property; }
+      inline const Property& get_property() const { return *m_property; }
+    protected:
+      // Holding the property by-value causes edge-descriptor
+      // invalidation for add_edge() with EdgeList=vecS. Instead we
+      // hold a pointer to the property. std::auto_ptr is not
+      // a perfect fit for the job, but it is darn close.
+      std::auto_ptr<Property> m_property;
+    };
+
+
+    template <class Vertex, class Iter, class Property>
+    class stored_edge_iter
+      : public stored_edge<Vertex>
+    {
+    public:
+      typedef Property property_type;
+      inline stored_edge_iter() { }
+      inline stored_edge_iter(Vertex v)
+        : stored_edge<Vertex>(v) { }
+      inline stored_edge_iter(Vertex v, Iter i, void* = 0)
+        : stored_edge<Vertex>(v), m_iter(i) { }
+      inline Property& get_property() { return m_iter->get_property(); }
+      inline const Property& get_property() const {
+        return m_iter->get_property();
+      }
+      inline Iter get_iter() const { return m_iter; }
+    protected:
+      Iter m_iter;
+    };
+
+    // For when the EdgeList is a std::vector.
+    // Want to make the iterator stable, so use an offset
+    // instead of an iterator into a std::vector
+    template <class Vertex, class EdgeVec, class Property>
+    class stored_ra_edge_iter
+      : public stored_edge<Vertex>
+    {
+      typedef typename EdgeVec::iterator Iter;
+    public:
+      typedef Property property_type;
+      inline stored_ra_edge_iter() { }
+      inline stored_ra_edge_iter(Vertex v, Iter i = Iter(),
+                                 EdgeVec* edge_vec = 0)
+        : stored_edge<Vertex>(v), m_i(i - edge_vec->begin()), m_vec(edge_vec){ }
+      inline Property& get_property() { return (*m_vec)[m_i].get_property(); }
+      inline const Property& get_property() const {
+        return (*m_vec)[m_i].get_property();
+      }
+      inline Iter get_iter() const { return m_vec->begin() + m_i; }
+    protected:
+      std::size_t m_i;
+      EdgeVec* m_vec;
+    };
+
+  } // namespace detail
+
+  template <class Tag, class Vertex, class Property>
+  const typename property_value<Property,Tag>::type&
+  get(Tag property_tag,
+      const detail::stored_edge_property<Vertex, Property>& e)
+  {
+    return get_property_value(e.get_property(), property_tag);
+  }
+
+  template <class Tag, class Vertex, class Iter, class Property>
+  const typename property_value<Property,Tag>::type&
+  get(Tag property_tag,
+      const detail::stored_edge_iter<Vertex, Iter, Property>& e)
+  {
+    return get_property_value(e.get_property(), property_tag);
+  }
+
+  template <class Tag, class Vertex, class EdgeVec, class Property>
+  const typename property_value<Property,Tag>::type&
+  get(Tag property_tag,
+      const detail::stored_ra_edge_iter<Vertex, EdgeVec, Property>& e)
+  {
+    return get_property_value(e.get_property(), property_tag);
+  }
+
+    //=========================================================================
+    // Directed Edges Helper Class
+
+    namespace detail {
+
+      // O(E/V)
+      template <class edge_descriptor, class EdgeList, class StoredProperty>
+      inline void
+      remove_directed_edge_dispatch(edge_descriptor, EdgeList& el,
+                                    StoredProperty& p)
+      {
+        for (typename EdgeList::iterator i = el.begin();
+             i != el.end(); ++i)
+          if (&(*i).get_property() == &p) {
+            el.erase(i);
+            return;
+          }
+      }
+
+      template <class incidence_iterator, class EdgeList, class Predicate>
+      inline void
+      remove_directed_edge_if_dispatch(incidence_iterator first,
+                                       incidence_iterator last,
+                                       EdgeList& el, Predicate pred,
+                                       boost::allow_parallel_edge_tag)
+      {
+        // remove_if
+        while (first != last && !pred(*first))
+          ++first;
+        incidence_iterator i = first;
+        if (first != last)
+          for (++i; i != last; ++i)
+            if (!pred(*i)) {
+              *first.base() = *i.base();
+              ++first;
+            }
+        el.erase(first.base(), el.end());
+      }
+      template <class incidence_iterator, class EdgeList, class Predicate>
+      inline void
+      remove_directed_edge_if_dispatch(incidence_iterator first,
+                                       incidence_iterator last,
+                                       EdgeList& el,
+                                       Predicate pred,
+                                       boost::disallow_parallel_edge_tag)
+      {
+        for (incidence_iterator next = first;
+             first != last; first = next) {
+          ++next;
+          if (pred(*first))
+            el.erase( first.base() );
+        }
+      }
+
+      template <class PropT, class Graph, class incidence_iterator,
+                class EdgeList, class Predicate>
+      inline void
+      undirected_remove_out_edge_if_dispatch(Graph& g,
+                                             incidence_iterator first,
+                                             incidence_iterator last,
+                                             EdgeList& el, Predicate pred,
+                                             boost::allow_parallel_edge_tag)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        // remove_if
+        while (first != last && !pred(*first))
+          ++first;
+        incidence_iterator i = first;
+        bool self_loop_removed = false;
+        if (first != last)
+          for (; i != last; ++i) {
+            if (self_loop_removed) {
+              /* With self loops, the descriptor will show up
+               * twice. The first time it will be removed, and now it
+               * will be skipped.
+               */
+              self_loop_removed = false;
+            }
+            else if (!pred(*i)) {
+              *first.base() = *i.base();
+              ++first;
+            } else {
+              if (source(*i, g) == target(*i, g)) self_loop_removed = true;
+              else {
+                // Remove the edge from the target
+                detail::remove_directed_edge_dispatch
+                  (*i,
+                   g.out_edge_list(target(*i, g)),
+                   *(PropT*)(*i).get_property());
+              }
+
+              // Erase the edge property
+              g.m_edges.erase( (*i.base()).get_iter() );
+            }
+          }
+        el.erase(first.base(), el.end());
+      }
+      template <class PropT, class Graph, class incidence_iterator,
+                class EdgeList, class Predicate>
+      inline void
+      undirected_remove_out_edge_if_dispatch(Graph& g,
+                                             incidence_iterator first,
+                                             incidence_iterator last,
+                                             EdgeList& el,
+                                             Predicate pred,
+                                             boost::disallow_parallel_edge_tag)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        for (incidence_iterator next = first;
+             first != last; first = next) {
+          ++next;
+          if (pred(*first)) {
+            if (source(*first, g) != target(*first, g)) {
+              // Remove the edge from the target
+              detail::remove_directed_edge_dispatch
+                (*first,
+                 g.out_edge_list(target(*first, g)),
+                 *(PropT*)(*first).get_property());
+            }
+
+            // Erase the edge property
+            g.m_edges.erase( (*first.base()).get_iter() );
+
+            // Erase the edge in the source
+            el.erase( first.base() );
+          }
+        }
+      }
+
+      // O(E/V)
+      template <class edge_descriptor, class EdgeList, class StoredProperty>
+      inline void
+      remove_directed_edge_dispatch(edge_descriptor e, EdgeList& el,
+                                    no_property&)
+      {
+        for (typename EdgeList::iterator i = el.begin();
+             i != el.end(); ++i)
+          if ((*i).get_target() == e.m_target) {
+            el.erase(i);
+            return;
+          }
+      }
+
+    } // namespace detail
+
+    template <class Config>
+    struct directed_edges_helper {
+
+      // Placement of these overloaded remove_edge() functions
+      // inside the class avoids a VC++ bug.
+
+      // O(E/V)
+      inline void
+      remove_edge(typename Config::edge_descriptor e)
+      {
+        typedef typename Config::graph_type graph_type;
+        graph_type& g = static_cast<graph_type&>(*this);
+        typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+        typedef typename Config::OutEdgeList::value_type::property_type PType;
+        detail::remove_directed_edge_dispatch(e, el,
+                                              *(PType*)e.get_property());
+      }
+
+      // O(1)
+      inline void
+      remove_edge(typename Config::out_edge_iterator iter)
+      {
+        typedef typename Config::graph_type graph_type;
+        graph_type& g = static_cast<graph_type&>(*this);
+        typename Config::edge_descriptor e = *iter;
+        typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+        el.erase(iter.base());
+      }
+
+    };
+
+    // O(1)
+    template <class Config>
+    inline std::pair<typename Config::edge_iterator,
+                     typename Config::edge_iterator>
+    edges(const directed_edges_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_iterator edge_iterator;
+      const graph_type& cg = static_cast<const graph_type&>(g_);
+      graph_type& g = const_cast<graph_type&>(cg);
+      return std::make_pair( edge_iterator(g.vertex_set().begin(),
+                                           g.vertex_set().begin(),
+                                           g.vertex_set().end(), g),
+                             edge_iterator(g.vertex_set().begin(),
+                                           g.vertex_set().end(),
+                                           g.vertex_set().end(), g) );
+    }
+
+    //=========================================================================
+    // Directed Graph Helper Class
+
+    struct adj_list_dir_traversal_tag :
+      public virtual vertex_list_graph_tag,
+      public virtual incidence_graph_tag,
+      public virtual adjacency_graph_tag,
+      public virtual edge_list_graph_tag { };
+
+    template <class Config>
+    struct directed_graph_helper
+      : public directed_edges_helper<Config> {
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef adj_list_dir_traversal_tag traversal_category;
+    };
+
+    // O(E/V)
+    template <class Config>
+    inline void
+    remove_edge(typename Config::vertex_descriptor u,
+                typename Config::vertex_descriptor v,
+                directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      detail::erase_from_incidence_list(g.out_edge_list(u), v, Cat());
+    }
+
+    template <class Config, class Predicate>
+    inline void
+    remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+                       directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::out_edge_iterator first, last;
+      boost::tie(first, last) = out_edges(u, g);
+      typedef typename Config::edge_parallel_category edge_parallel_category;
+      detail::remove_directed_edge_if_dispatch
+        (first, last, g.out_edge_list(u), pred, edge_parallel_category());
+    }
+
+    template <class Config, class Predicate>
+    inline void
+    remove_edge_if(Predicate pred, directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+
+      typename Config::vertex_iterator vi, vi_end;
+      for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+        remove_out_edge_if(*vi, pred, g);
+    }
+
+    template <class EdgeOrIter, class Config>
+    inline void
+    remove_edge(EdgeOrIter e_or_iter, directed_graph_helper<Config>& g_)
+    {
+      g_.remove_edge(e_or_iter);
+    }
+
+    // O(V + E) for allow_parallel_edges
+    // O(V * log(E/V)) for disallow_parallel_edges
+    template <class Config>
+    inline void
+    clear_vertex(typename Config::vertex_descriptor u,
+                 directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::vertex_iterator vi, viend;
+      for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
+        detail::erase_from_incidence_list(g.out_edge_list(*vi), u, Cat());
+      g.out_edge_list(u).clear();
+      // clear() should be a req of Sequence and AssociativeContainer,
+      // or maybe just Container
+    }
+
+    template <class Config>
+    inline void
+    clear_out_edges(typename Config::vertex_descriptor u,
+                    directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      g.out_edge_list(u).clear();
+      // clear() should be a req of Sequence and AssociativeContainer,
+      // or maybe just Container
+    }
+
+    // O(V), could do better...
+    template <class Config>
+    inline typename Config::edges_size_type
+    num_edges(const directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      const graph_type& g = static_cast<const graph_type&>(g_);
+      typename Config::edges_size_type num_e = 0;
+      typename Config::vertex_iterator vi, vi_end;
+      for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+        num_e += out_degree(*vi, g);
+      return num_e;
+    }
+    // O(1) for allow_parallel_edge_tag
+    // O(log(E/V)) for disallow_parallel_edge_tag
+    template <class Config>
+    inline std::pair<typename directed_graph_helper<Config>::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             const typename Config::edge_property_type& p,
+             directed_graph_helper<Config>& g_)
+    {
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::StoredEdge StoredEdge;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::OutEdgeList::iterator i;
+      bool inserted;
+      boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+                                            StoredEdge(v, p));
+      return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
+                            inserted);
+    }
+    // Did not use default argument here because that
+    // causes Visual C++ to get confused.
+    template <class Config>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             directed_graph_helper<Config>& g_)
+    {
+      typename Config::edge_property_type p;
+      return add_edge(u, v, p, g_);
+    }
+    //=========================================================================
+    // Undirected Graph Helper Class
+
+    template <class Config>
+    struct undirected_graph_helper;
+
+    struct undir_adj_list_traversal_tag :
+      public virtual vertex_list_graph_tag,
+      public virtual incidence_graph_tag,
+      public virtual adjacency_graph_tag,
+      public virtual edge_list_graph_tag,
+      public virtual bidirectional_graph_tag { };
+
+    namespace detail {
+
+      // using class with specialization for dispatch is a VC++ workaround.
+      template <class StoredProperty>
+      struct remove_undirected_edge_dispatch {
+
+        // O(E/V)
+        template <class edge_descriptor, class Config>
+        static void
+        apply(edge_descriptor e,
+              undirected_graph_helper<Config>& g_,
+              StoredProperty& p)
+        {
+          typedef typename Config::global_edgelist_selector EdgeListS;
+          BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+          typedef typename Config::graph_type graph_type;
+          graph_type& g = static_cast<graph_type&>(g_);
+
+          typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+          typename Config::OutEdgeList::iterator out_i = out_el.begin();
+          for (; out_i != out_el.end(); ++out_i)
+            if (&(*out_i).get_property() == &p) {
+              out_el.erase(out_i);
+              break;
+            }
+          typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+          typename Config::OutEdgeList::iterator in_i = in_el.begin();
+          for (; in_i != in_el.end(); ++in_i)
+            if (&(*in_i).get_property() == &p) {
+              g.m_edges.erase((*in_i).get_iter());
+              in_el.erase(in_i);
+              return;
+            }
+        }
+      };
+
+      template <>
+      struct remove_undirected_edge_dispatch<no_property> {
+        // O(E/V)
+        template <class edge_descriptor, class Config>
+        static void
+        apply(edge_descriptor e,
+              undirected_graph_helper<Config>& g_,
+              no_property&)
+        {
+          typedef typename Config::global_edgelist_selector EdgeListS;
+          BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+          typedef typename Config::graph_type graph_type;
+          graph_type& g = static_cast<graph_type&>(g_);
+          no_property* p = (no_property*)e.get_property();
+          typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+          typename Config::OutEdgeList::iterator out_i = out_el.begin();
+          for (; out_i != out_el.end(); ++out_i)
+            if (&(*out_i).get_property() == p) {
+              out_el.erase(out_i);
+              break;
+            }
+          typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+          typename Config::OutEdgeList::iterator in_i = in_el.begin();
+          for (; in_i != in_el.end(); ++in_i)
+            if (&(*in_i).get_property() == p) {
+              g.m_edges.erase((*in_i).get_iter());
+              in_el.erase(in_i);
+              return;
+            }
+        }
+      };
+
+      // O(E/V)
+      template <class Graph, class EdgeList, class Vertex>
+      inline void
+      remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+                               boost::allow_parallel_edge_tag cat)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename EdgeList::value_type StoredEdge;
+        typename EdgeList::iterator i = el.begin(), end = el.end();
+        for (; i != end; ++i) {
+          if ((*i).get_target() == v) {
+            // NOTE: Wihtout this skip, this loop will double-delete properties
+            // of loop edges. This solution is based on the observation that
+            // the incidence edges of a vertex with a loop are adjacent in the
+            // out edge list. This *may* actually hold for multisets also.
+            bool skip = (boost::next(i) != end && i->get_iter() == boost::next(i)->get_iter());
+            g.m_edges.erase((*i).get_iter());
+            if (skip) ++i;
+          }
+        }
+        detail::erase_from_incidence_list(el, v, cat);
+      }
+      // O(log(E/V))
+      template <class Graph, class EdgeList, class Vertex>
+      inline void
+      remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+                               boost::disallow_parallel_edge_tag)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename EdgeList::value_type StoredEdge;
+        typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end();
+        if (i != end) {
+          g.m_edges.erase((*i).get_iter());
+          el.erase(i);
+        }
+      }
+
+    } // namespace detail
+
+    template <class Vertex, class EdgeProperty>
+    struct list_edge // short name due to VC++ truncation and linker problems
+      : public boost::detail::edge_base<boost::undirected_tag, Vertex>
+    {
+      typedef EdgeProperty property_type;
+      typedef boost::detail::edge_base<boost::undirected_tag, Vertex> Base;
+      list_edge(Vertex u, Vertex v, const EdgeProperty& p = EdgeProperty())
+        : Base(u, v), m_property(p) { }
+      EdgeProperty& get_property() { return m_property; }
+      const EdgeProperty& get_property() const { return m_property; }
+      // the following methods should never be used, but are needed
+      // to make SGI MIPSpro C++ happy
+      list_edge() { }
+      bool operator==(const list_edge&) const { return false; }
+      bool operator<(const list_edge&) const { return false; }
+      EdgeProperty m_property;
+    };
+
+    template <class Config>
+    struct undirected_graph_helper {
+
+      typedef undir_adj_list_traversal_tag traversal_category;
+
+      // Placement of these overloaded remove_edge() functions
+      // inside the class avoids a VC++ bug.
+
+      // O(E/V)
+      inline void
+      remove_edge(typename Config::edge_descriptor e)
+      {
+        typedef typename Config::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename Config::OutEdgeList::value_type::property_type PType;
+        detail::remove_undirected_edge_dispatch<PType>::apply
+          (e, *this, *(PType*)e.get_property());
+      }
+      // O(E/V)
+      inline void
+      remove_edge(typename Config::out_edge_iterator iter)
+      {
+        this->remove_edge(*iter);
+      }
+    };
+
+    // Had to make these non-members to avoid accidental instantiation
+    // on SGI MIPSpro C++
+    template <class C>
+    inline typename C::InEdgeList&
+    in_edge_list(undirected_graph_helper<C>&,
+                 typename C::vertex_descriptor v)
+    {
+      typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+      return sv->m_out_edges;
+    }
+    template <class C>
+    inline const typename C::InEdgeList&
+    in_edge_list(const undirected_graph_helper<C>&,
+                 typename C::vertex_descriptor v) {
+      typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+      return sv->m_out_edges;
+    }
+
+    // O(E/V)
+    template <class EdgeOrIter, class Config>
+    inline void
+    remove_edge(EdgeOrIter e, undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      g_.remove_edge(e);
+    }
+
+    // O(E/V) or O(log(E/V))
+    template <class Config>
+    void
+    remove_edge(typename Config::vertex_descriptor u,
+                typename Config::vertex_descriptor v,
+                undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typedef typename Config::edge_parallel_category Cat;
+      detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+      detail::erase_from_incidence_list(g.out_edge_list(v), u, Cat());
+    }
+
+    template <class Config, class Predicate>
+    void
+    remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+                       undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::OutEdgeList::value_type::property_type PropT;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::out_edge_iterator first, last;
+      boost::tie(first, last) = out_edges(u, g);
+      typedef typename Config::edge_parallel_category Cat;
+      detail::undirected_remove_out_edge_if_dispatch<PropT>
+        (g, first, last, g.out_edge_list(u), pred, Cat());
+    }
+    template <class Config, class Predicate>
+    void
+    remove_in_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+                      undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      remove_out_edge_if(u, pred, g_);
+    }
+
+    // O(E/V * E) or O(log(E/V) * E)
+    template <class Predicate, class Config>
+    void
+    remove_edge_if(Predicate pred, undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::edge_iterator ei, ei_end, next;
+      boost::tie(ei, ei_end) = edges(g);
+      for (next = ei; ei != ei_end; ei = next) {
+        ++next;
+        if (pred(*ei))
+          remove_edge(*ei, g);
+      }
+    }
+
+    // O(1)
+    template <class Config>
+    inline std::pair<typename Config::edge_iterator,
+                     typename Config::edge_iterator>
+    edges(const undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_iterator edge_iterator;
+      const graph_type& cg = static_cast<const graph_type&>(g_);
+      graph_type& g = const_cast<graph_type&>(cg);
+      return std::make_pair( edge_iterator(g.m_edges.begin()),
+                             edge_iterator(g.m_edges.end()) );
+    }
+    // O(1)
+    template <class Config>
+    inline typename Config::edges_size_type
+    num_edges(const undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      const graph_type& g = static_cast<const graph_type&>(g_);
+      return g.m_edges.size();
+    }
+    // O(E/V * E/V)
+    template <class Config>
+    inline void
+    clear_vertex(typename Config::vertex_descriptor u,
+                 undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::OutEdgeList& el = g.out_edge_list(u);
+      typename Config::OutEdgeList::iterator
+        ei = el.begin(), ei_end = el.end();
+      for (; ei != ei_end; /* Increment below */ ) {
+        bool is_self_loop = (*ei).get_target() == u;
+        // Don't erase from our own incidence list in the case of a self-loop
+        // since we're clearing it anyway.
+        if (!is_self_loop) {
+          detail::erase_from_incidence_list
+            (g.out_edge_list((*ei).get_target()), u, Cat());
+          typename Config::OutEdgeList::iterator ei_copy = ei;
+          ++ei;
+          if (!is_self_loop) g.m_edges.erase((*ei_copy).get_iter());
+        } else {
+          ++ei;
+        }
+      }
+      g.out_edge_list(u).clear();
+    }
+    // O(1) for allow_parallel_edge_tag
+    // O(log(E/V)) for disallow_parallel_edge_tag
+    template <class Config>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             const typename Config::edge_property_type& p,
+             undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::StoredEdge StoredEdge;
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+
+      bool inserted;
+      typename Config::EdgeContainer::value_type e(u, v, p);
+      typename Config::EdgeContainer::iterator p_iter
+        = graph_detail::push(g.m_edges, e).first;
+
+      typename Config::OutEdgeList::iterator i;
+      boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+                                    StoredEdge(v, p_iter, &g.m_edges));
+      if (inserted) {
+        boost::graph_detail::push(g.out_edge_list(v), StoredEdge(u, p_iter, &g.m_edges));
+        return std::make_pair(edge_descriptor(u, v, &p_iter->get_property()),
+                              true);
+      } else {
+        g.m_edges.erase(p_iter);
+        return std::make_pair
+          (edge_descriptor(u, v, &i->get_iter()->get_property()), false);
+      }
+    }
+    template <class Config>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             undirected_graph_helper<Config>& g_)
+    {
+      typename Config::edge_property_type p;
+      return add_edge(u, v, p, g_);
+    }
+
+    // O(1)
+    template <class Config>
+    inline typename Config::degree_size_type
+    degree(typename Config::vertex_descriptor u,
+           const undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type Graph;
+      const Graph& g = static_cast<const Graph&>(g_);
+      return out_degree(u, g);
+    }
+
+    template <class Config>
+    inline std::pair<typename Config::in_edge_iterator,
+                     typename Config::in_edge_iterator>
+    in_edges(typename Config::vertex_descriptor u,
+             const undirected_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type Graph;
+      const Graph& cg = static_cast<const Graph&>(g_);
+      Graph& g = const_cast<Graph&>(cg);
+      typedef typename Config::in_edge_iterator in_edge_iterator;
+      return
+        std::make_pair(in_edge_iterator(g.out_edge_list(u).begin(), u),
+                       in_edge_iterator(g.out_edge_list(u).end(), u));
+    }
+
+    template <class Config>
+    inline typename Config::degree_size_type
+    in_degree(typename Config::vertex_descriptor u,
+              const undirected_graph_helper<Config>& g_)
+    { return degree(u, g_); }
+
+    //=========================================================================
+    // Bidirectional Graph Helper Class
+
+    struct bidir_adj_list_traversal_tag :
+      public virtual vertex_list_graph_tag,
+      public virtual incidence_graph_tag,
+      public virtual adjacency_graph_tag,
+      public virtual edge_list_graph_tag,
+      public virtual bidirectional_graph_tag { };
+
+    template <class Config>
+    struct bidirectional_graph_helper
+      : public directed_edges_helper<Config> {
+      typedef bidir_adj_list_traversal_tag traversal_category;
+    };
+
+    // Had to make these non-members to avoid accidental instantiation
+    // on SGI MIPSpro C++
+    template <class C>
+    inline typename C::InEdgeList&
+    in_edge_list(bidirectional_graph_helper<C>&,
+                 typename C::vertex_descriptor v)
+    {
+      typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+      return sv->m_in_edges;
+    }
+    template <class C>
+    inline const typename C::InEdgeList&
+    in_edge_list(const bidirectional_graph_helper<C>&,
+                 typename C::vertex_descriptor v) {
+      typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+      return sv->m_in_edges;
+    }
+
+    template <class Predicate, class Config>
+    inline void
+    remove_edge_if(Predicate pred, bidirectional_graph_helper<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::edge_iterator ei, ei_end, next;
+      boost::tie(ei, ei_end) = edges(g);
+      for (next = ei; ei != ei_end; ei = next) {
+        ++next;
+        if (pred(*ei))
+          remove_edge(*ei, g);
+      }
+    }
+
+    template <class Config>
+    inline std::pair<typename Config::in_edge_iterator,
+                     typename Config::in_edge_iterator>
+    in_edges(typename Config::vertex_descriptor u,
+             const bidirectional_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      const graph_type& cg = static_cast<const graph_type&>(g_);
+      graph_type& g = const_cast<graph_type&>(cg);
+      typedef typename Config::in_edge_iterator in_edge_iterator;
+      return
+        std::make_pair(in_edge_iterator(in_edge_list(g, u).begin(), u),
+                       in_edge_iterator(in_edge_list(g, u).end(), u));
+    }
+
+    // O(1)
+    template <class Config>
+    inline std::pair<typename Config::edge_iterator,
+                     typename Config::edge_iterator>
+    edges(const bidirectional_graph_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_iterator edge_iterator;
+      const graph_type& cg = static_cast<const graph_type&>(g_);
+      graph_type& g = const_cast<graph_type&>(cg);
+      return std::make_pair( edge_iterator(g.m_edges.begin()),
+                             edge_iterator(g.m_edges.end()) );
+    }
+
+    //=========================================================================
+    // Bidirectional Graph Helper Class (with edge properties)
+
+
+    template <class Config>
+    struct bidirectional_graph_helper_with_property
+      : public bidirectional_graph_helper<Config>
+    {
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+
+      std::pair<out_edge_iterator, out_edge_iterator>
+      get_parallel_edge_sublist(typename Config::edge_descriptor e,
+                                const graph_type& g,
+                                void*)
+      { return out_edges(source(e, g), g); }
+
+      std::pair<out_edge_iterator, out_edge_iterator>
+      get_parallel_edge_sublist(typename Config::edge_descriptor e,
+                                const graph_type& g,
+                                setS*)
+      { return edge_range(source(e, g), target(e, g), g); }
+
+      std::pair<out_edge_iterator, out_edge_iterator>
+      get_parallel_edge_sublist(typename Config::edge_descriptor e,
+                                const graph_type& g,
+                                multisetS*)
+      { return edge_range(source(e, g), target(e, g), g); }
+
+      std::pair<out_edge_iterator, out_edge_iterator>
+      get_parallel_edge_sublist(typename Config::edge_descriptor e,
+                                const graph_type& g,
+                                hash_setS*)
+      { return edge_range(source(e, g), target(e, g), g); }
+
+      // Placement of these overloaded remove_edge() functions
+      // inside the class avoids a VC++ bug.
+
+      // O(E/V) or O(log(E/V))
+      void
+      remove_edge(typename Config::edge_descriptor e)
+      {
+        typedef typename Config::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        graph_type& g = static_cast<graph_type&>(*this);
+
+        typedef typename Config::edgelist_selector OutEdgeListS;
+
+        std::pair<out_edge_iterator, out_edge_iterator> rng =
+          get_parallel_edge_sublist(e, g, (OutEdgeListS*)(0));
+        rng.first = std::find(rng.first, rng.second, e);
+        BOOST_ASSERT(rng.first != rng.second);
+        remove_edge(rng.first);
+      }
+
+      inline void
+      remove_edge(typename Config::out_edge_iterator iter)
+      {
+        typedef typename Config::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename Config::graph_type graph_type;
+        graph_type& g = static_cast<graph_type&>(*this);
+        typename Config::edge_descriptor e = *iter;
+        typename Config::OutEdgeList& oel = g.out_edge_list(source(e, g));
+        typename Config::InEdgeList& iel = in_edge_list(g, target(e, g));
+        typedef typename Config::OutEdgeList::value_type::property_type PType;
+        PType& p = *(PType*)e.get_property();
+        detail::remove_directed_edge_dispatch(*iter, iel, p);
+        g.m_edges.erase(iter.base()->get_iter());
+        oel.erase(iter.base());
+      }
+    };
+
+    // O(E/V) for allow_parallel_edge_tag
+    // O(log(E/V)) for disallow_parallel_edge_tag
+    template <class Config>
+    inline void
+    remove_edge(typename Config::vertex_descriptor u,
+                typename Config::vertex_descriptor v,
+                bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typedef typename Config::edge_parallel_category Cat;
+      detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+      detail::erase_from_incidence_list(in_edge_list(g, v), u, Cat());
+    }
+
+    // O(E/V) or O(log(E/V))
+    template <class EdgeOrIter, class Config>
+    inline void
+    remove_edge(EdgeOrIter e,
+                bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      g_.remove_edge(e);
+    }
+
+    template <class Config, class Predicate>
+    inline void
+    remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+                       bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::OutEdgeList::value_type::property_type PropT;
+      graph_type& g = static_cast<graph_type&>(g_);
+
+      typedef typename Config::EdgeIter EdgeIter;
+      typedef std::vector<EdgeIter> Garbage;
+      Garbage garbage;
+
+      // First remove the edges from the targets' in-edge lists and
+      // from the graph's edge set list.
+      typename Config::out_edge_iterator out_i, out_end;
+      for (boost::tie(out_i, out_end) = out_edges(u, g); out_i != out_end; ++out_i)
+        if (pred(*out_i)) {
+          detail::remove_directed_edge_dispatch
+            (*out_i, in_edge_list(g, target(*out_i, g)),
+             *(PropT*)(*out_i).get_property());
+          // Put in garbage to delete later. Will need the properties
+          // for the remove_if of the out-edges.
+          garbage.push_back((*out_i.base()).get_iter());
+        }
+
+      // Now remove the edges from this out-edge list.
+      typename Config::out_edge_iterator first, last;
+      boost::tie(first, last) = out_edges(u, g);
+      typedef typename Config::edge_parallel_category Cat;
+      detail::remove_directed_edge_if_dispatch
+        (first, last, g.out_edge_list(u), pred, Cat());
+
+      // Now delete the edge properties from the g.m_edges list
+      for (typename Garbage::iterator i = garbage.begin();
+           i != garbage.end(); ++i)
+        g.m_edges.erase(*i);
+    }
+    template <class Config, class Predicate>
+    inline void
+    remove_in_edge_if(typename Config::vertex_descriptor v, Predicate pred,
+                      bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::OutEdgeList::value_type::property_type PropT;
+      graph_type& g = static_cast<graph_type&>(g_);
+
+      typedef typename Config::EdgeIter EdgeIter;
+      typedef std::vector<EdgeIter> Garbage;
+      Garbage garbage;
+
+      // First remove the edges from the sources' out-edge lists and
+      // from the graph's edge set list.
+      typename Config::in_edge_iterator in_i, in_end;
+      for (boost::tie(in_i, in_end) = in_edges(v, g); in_i != in_end; ++in_i)
+        if (pred(*in_i)) {
+          typename Config::vertex_descriptor u = source(*in_i, g);
+          detail::remove_directed_edge_dispatch
+            (*in_i, g.out_edge_list(u), *(PropT*)(*in_i).get_property());
+          // Put in garbage to delete later. Will need the properties
+          // for the remove_if of the out-edges.
+          garbage.push_back((*in_i.base()).get_iter());
+        }
+      // Now remove the edges from this in-edge list.
+      typename Config::in_edge_iterator first, last;
+      boost::tie(first, last) = in_edges(v, g);
+      typedef typename Config::edge_parallel_category Cat;
+      detail::remove_directed_edge_if_dispatch
+        (first, last, in_edge_list(g, v), pred, Cat());
+
+      // Now delete the edge properties from the g.m_edges list
+      for (typename Garbage::iterator i = garbage.begin();
+           i != garbage.end(); ++i)
+        g.m_edges.erase(*i);
+    }
+
+    // O(1)
+    template <class Config>
+    inline typename Config::edges_size_type
+    num_edges(const bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      const graph_type& g = static_cast<const graph_type&>(g_);
+      return g.m_edges.size();
+    }
+    // O(E/V * E/V) for allow_parallel_edge_tag
+    // O(E/V * log(E/V)) for disallow_parallel_edge_tag
+    template <class Config>
+    inline void
+    clear_vertex(typename Config::vertex_descriptor u,
+                 bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::OutEdgeList& el = g.out_edge_list(u);
+      typename Config::OutEdgeList::iterator
+        ei = el.begin(), ei_end = el.end();
+      for (; ei != ei_end; ++ei) {
+        detail::erase_from_incidence_list
+          (in_edge_list(g, (*ei).get_target()), u, Cat());
+        g.m_edges.erase((*ei).get_iter());
+      }
+      typename Config::InEdgeList& in_el = in_edge_list(g, u);
+      typename Config::InEdgeList::iterator
+        in_ei = in_el.begin(), in_ei_end = in_el.end();
+      for (; in_ei != in_ei_end; ++in_ei) {
+        detail::erase_from_incidence_list
+          (g.out_edge_list((*in_ei).get_target()), u, Cat());
+        g.m_edges.erase((*in_ei).get_iter());
+      }
+      g.out_edge_list(u).clear();
+      in_edge_list(g, u).clear();
+    }
+
+    template <class Config>
+    inline void
+    clear_out_edges(typename Config::vertex_descriptor u,
+                    bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::OutEdgeList& el = g.out_edge_list(u);
+      typename Config::OutEdgeList::iterator
+        ei = el.begin(), ei_end = el.end();
+      for (; ei != ei_end; ++ei) {
+        detail::erase_from_incidence_list
+          (in_edge_list(g, (*ei).get_target()), u, Cat());
+        g.m_edges.erase((*ei).get_iter());
+      }
+      g.out_edge_list(u).clear();
+    }
+
+    template <class Config>
+    inline void
+    clear_in_edges(typename Config::vertex_descriptor u,
+                   bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::global_edgelist_selector EdgeListS;
+      BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+      typedef typename Config::graph_type graph_type;
+      typedef typename Config::edge_parallel_category Cat;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typename Config::InEdgeList& in_el = in_edge_list(g, u);
+      typename Config::InEdgeList::iterator
+        in_ei = in_el.begin(), in_ei_end = in_el.end();
+      for (; in_ei != in_ei_end; ++in_ei) {
+        detail::erase_from_incidence_list
+          (g.out_edge_list((*in_ei).get_target()), u, Cat());
+        g.m_edges.erase((*in_ei).get_iter());
+      }
+      in_edge_list(g, u).clear();
+    }
+
+    // O(1) for allow_parallel_edge_tag
+    // O(log(E/V)) for disallow_parallel_edge_tag
+    template <class Config>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             const typename Config::edge_property_type& p,
+             bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      graph_type& g = static_cast<graph_type&>(g_);
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::StoredEdge StoredEdge;
+      bool inserted;
+      typename Config::EdgeContainer::value_type e(u, v, p);
+      typename Config::EdgeContainer::iterator p_iter
+        = graph_detail::push(g.m_edges, e).first;
+      typename Config::OutEdgeList::iterator i;
+      boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+                                        StoredEdge(v, p_iter, &g.m_edges));
+      if (inserted) {
+        boost::graph_detail::push(in_edge_list(g, v), StoredEdge(u, p_iter, &g.m_edges));
+        return std::make_pair(edge_descriptor(u, v, &p_iter->m_property),
+                              true);
+      } else {
+        g.m_edges.erase(p_iter);
+        return std::make_pair(edge_descriptor(u, v,
+                                     &i->get_iter()->get_property()),
+                              false);
+      }
+    }
+
+    template <class Config>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typename Config::edge_property_type p;
+      return add_edge(u, v, p, g_);
+    }
+    // O(1)
+    template <class Config>
+    inline typename Config::degree_size_type
+    degree(typename Config::vertex_descriptor u,
+           const bidirectional_graph_helper_with_property<Config>& g_)
+    {
+      typedef typename Config::graph_type graph_type;
+      const graph_type& g = static_cast<const graph_type&>(g_);
+      return in_degree(u, g) + out_degree(u, g);
+    }
+
+    //=========================================================================
+    // Adjacency List Helper Class
+
+    template <class Config, class Base>
+    struct adj_list_helper : public Base
+    {
+      typedef typename Config::graph_type AdjList;
+      typedef typename Config::vertex_descriptor vertex_descriptor;
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      typedef typename Config::in_edge_iterator in_edge_iterator;
+      typedef typename Config::adjacency_iterator adjacency_iterator;
+      typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+      typedef typename Config::vertex_iterator vertex_iterator;
+      typedef typename Config::edge_iterator edge_iterator;
+      typedef typename Config::directed_category directed_category;
+      typedef typename Config::edge_parallel_category edge_parallel_category;
+      typedef typename Config::vertices_size_type vertices_size_type;
+      typedef typename Config::edges_size_type edges_size_type;
+      typedef typename Config::degree_size_type degree_size_type;
+      typedef typename Config::StoredEdge StoredEdge;
+      typedef typename Config::edge_property_type edge_property_type;
+
+      typedef typename Config::global_edgelist_selector
+        global_edgelist_selector;
+    };
+
+    template <class Config, class Base>
+    inline std::pair<typename Config::adjacency_iterator,
+                     typename Config::adjacency_iterator>
+    adjacent_vertices(typename Config::vertex_descriptor u,
+                      const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      const AdjList& cg = static_cast<const AdjList&>(g_);
+      AdjList& g = const_cast<AdjList&>(cg);
+      typedef typename Config::adjacency_iterator adjacency_iterator;
+      typename Config::out_edge_iterator first, last;
+      boost::tie(first, last) = out_edges(u, g);
+      return std::make_pair(adjacency_iterator(first, &g),
+                            adjacency_iterator(last, &g));
+    }
+    template <class Config, class Base>
+    inline std::pair<typename Config::inv_adjacency_iterator,
+                     typename Config::inv_adjacency_iterator>
+    inv_adjacent_vertices(typename Config::vertex_descriptor u,
+                          const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      const AdjList& cg = static_cast<const AdjList&>(g_);
+      AdjList& g = const_cast<AdjList&>(cg);
+      typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+      typename Config::in_edge_iterator first, last;
+      boost::tie(first, last) = in_edges(u, g);
+      return std::make_pair(inv_adjacency_iterator(first, &g),
+                            inv_adjacency_iterator(last, &g));
+    }
+    template <class Config, class Base>
+    inline std::pair<typename Config::out_edge_iterator,
+                     typename Config::out_edge_iterator>
+    out_edges(typename Config::vertex_descriptor u,
+              const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      const AdjList& cg = static_cast<const AdjList&>(g_);
+      AdjList& g = const_cast<AdjList&>(cg);
+      return
+        std::make_pair(out_edge_iterator(g.out_edge_list(u).begin(), u),
+                       out_edge_iterator(g.out_edge_list(u).end(), u));
+    }
+    template <class Config, class Base>
+    inline std::pair<typename Config::vertex_iterator,
+                     typename Config::vertex_iterator>
+    vertices(const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      const AdjList& cg = static_cast<const AdjList&>(g_);
+      AdjList& g = const_cast<AdjList&>(cg);
+      return std::make_pair( g.vertex_set().begin(), g.vertex_set().end() );
+    }
+    template <class Config, class Base>
+    inline typename Config::vertices_size_type
+    num_vertices(const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      const AdjList& g = static_cast<const AdjList&>(g_);
+      return g.vertex_set().size();
+    }
+    template <class Config, class Base>
+    inline typename Config::degree_size_type
+    out_degree(typename Config::vertex_descriptor u,
+               const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type AdjList;
+      const AdjList& g = static_cast<const AdjList&>(g_);
+      return g.out_edge_list(u).size();
+    }
+    template <class Config, class Base>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    edge(typename Config::vertex_descriptor u,
+         typename Config::vertex_descriptor v,
+         const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type Graph;
+      typedef typename Config::StoredEdge StoredEdge;
+      const Graph& cg = static_cast<const Graph&>(g_);
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      const typename Config::OutEdgeList& el = cg.out_edge_list(u);
+      typename Config::OutEdgeList::const_iterator it = graph_detail::
+        find(el, StoredEdge(v));
+      return std::make_pair(
+               typename Config::edge_descriptor
+                     (u, v, (it == el.end() ? 0 : &(*it).get_property())),
+               (it != el.end()));
+    }
+
+    template <class Config, class Base>
+    inline std::pair<typename Config::out_edge_iterator,
+                     typename Config::out_edge_iterator>
+    edge_range(typename Config::vertex_descriptor u,
+               typename Config::vertex_descriptor v,
+               const adj_list_helper<Config, Base>& g_)
+    {
+      typedef typename Config::graph_type Graph;
+      typedef typename Config::StoredEdge StoredEdge;
+      const Graph& cg = static_cast<const Graph&>(g_);
+      Graph& g = const_cast<Graph&>(cg);
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      typename Config::OutEdgeList& el = g.out_edge_list(u);
+      typename Config::OutEdgeList::iterator first, last;
+      typename Config::EdgeContainer fake_edge_container;
+      boost::tie(first, last) = graph_detail::
+        equal_range(el, StoredEdge(v, fake_edge_container.end(),
+                                   &fake_edge_container));
+      return std::make_pair(out_edge_iterator(first, u),
+                            out_edge_iterator(last, u));
+    }
+
+    template <class Config>
+    inline typename Config::degree_size_type
+    in_degree(typename Config::vertex_descriptor u,
+              const directed_edges_helper<Config>& g_)
+    {
+      typedef typename Config::graph_type Graph;
+      const Graph& cg = static_cast<const Graph&>(g_);
+      Graph& g = const_cast<Graph&>(cg);
+      return in_edge_list(g, u).size();
+    }
+
+    namespace detail {
+      template <class Config, class Base, class Property>
+      inline
+      typename boost::property_map<typename Config::graph_type,
+        Property>::type
+      get_dispatch(adj_list_helper<Config,Base>&, Property,
+                   boost::edge_property_tag) {
+        typedef typename Config::graph_type Graph;
+        typedef typename boost::property_map<Graph, Property>::type PA;
+        return PA();
+      }
+      template <class Config, class Base, class Property>
+      inline
+      typename boost::property_map<typename Config::graph_type,
+        Property>::const_type
+      get_dispatch(const adj_list_helper<Config,Base>&, Property,
+                   boost::edge_property_tag) {
+        typedef typename Config::graph_type Graph;
+        typedef typename boost::property_map<Graph, Property>::const_type PA;
+        return PA();
+      }
+
+      template <class Config, class Base, class Property>
+      inline
+      typename boost::property_map<typename Config::graph_type,
+        Property>::type
+      get_dispatch(adj_list_helper<Config,Base>& g, Property,
+                   boost::vertex_property_tag) {
+        typedef typename Config::graph_type Graph;
+        typedef typename boost::property_map<Graph, Property>::type PA;
+        return PA(&static_cast<Graph&>(g));
+      }
+      template <class Config, class Base, class Property>
+      inline
+      typename boost::property_map<typename Config::graph_type,
+        Property>::const_type
+      get_dispatch(const adj_list_helper<Config, Base>& g, Property,
+                   boost::vertex_property_tag) {
+        typedef typename Config::graph_type Graph;
+        typedef typename boost::property_map<Graph, Property>::const_type PA;
+        const Graph& cg = static_cast<const Graph&>(g);
+        return PA(&cg);
+      }
+
+    } // namespace detail
+
+    // Implementation of the PropertyGraph interface
+    template <class Config, class Base, class Property>
+    inline
+    typename boost::property_map<typename Config::graph_type, Property>::type
+    get(Property p, adj_list_helper<Config, Base>& g) {
+      typedef typename property_kind<Property>::type Kind;
+      return detail::get_dispatch(g, p, Kind());
+    }
+    template <class Config, class Base, class Property>
+    inline
+    typename boost::property_map<typename Config::graph_type,
+      Property>::const_type
+    get(Property p, const adj_list_helper<Config, Base>& g) {
+      typedef typename property_kind<Property>::type Kind;
+      return detail::get_dispatch(g, p, Kind());
+    }
+
+    template <class Config, class Base, class Property, class Key>
+    inline
+    typename boost::property_traits<
+      typename boost::property_map<typename Config::graph_type,
+        Property>::type
+    >::reference
+    get(Property p, adj_list_helper<Config, Base>& g, const Key& key) {
+      return get(get(p, g), key);
+    }
+
+    template <class Config, class Base, class Property, class Key>
+    inline
+    typename boost::property_traits<
+      typename boost::property_map<typename Config::graph_type,
+        Property>::const_type
+    >::reference
+    get(Property p, const adj_list_helper<Config, Base>& g, const Key& key) {
+      return get(get(p, g), key);
+    }
+
+    template <class Config, class Base, class Property, class Key,class Value>
+    inline void
+    put(Property p, adj_list_helper<Config, Base>& g,
+        const Key& key, const Value& value)
+    {
+      typedef typename Config::graph_type Graph;
+      typedef typename boost::property_map<Graph, Property>::type Map;
+      Map pmap = get(p, static_cast<Graph&>(g));
+      put(pmap, key, value);
+    }
+
+
+    //=========================================================================
+    // Generalize Adjacency List Implementation
+
+    struct adj_list_tag { };
+
+    template <class Derived, class Config, class Base>
+    class adj_list_impl
+      : public adj_list_helper<Config, Base>
+    {
+      typedef typename Config::OutEdgeList OutEdgeList;
+      typedef typename Config::InEdgeList InEdgeList;
+      typedef typename Config::StoredVertexList StoredVertexList;
+    public:
+      typedef typename Config::stored_vertex stored_vertex;
+      typedef typename Config::EdgeContainer EdgeContainer;
+      typedef typename Config::vertex_descriptor vertex_descriptor;
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::vertex_iterator vertex_iterator;
+      typedef typename Config::edge_iterator edge_iterator;
+      typedef typename Config::edge_parallel_category edge_parallel_category;
+      typedef typename Config::vertices_size_type vertices_size_type;
+      typedef typename Config::edges_size_type edges_size_type;
+      typedef typename Config::degree_size_type degree_size_type;
+      typedef typename Config::edge_property_type edge_property_type;
+      typedef adj_list_tag graph_tag;
+
+      static vertex_descriptor null_vertex()
+      {
+        return 0;
+      }
+
+      inline adj_list_impl() { }
+
+      inline adj_list_impl(const adj_list_impl& x) {
+        copy_impl(x);
+      }
+      inline adj_list_impl& operator=(const adj_list_impl& x) {
+        this->clear();
+        copy_impl(x);
+        return *this;
+      }
+      inline void clear() {
+        for (typename StoredVertexList::iterator i = m_vertices.begin();
+             i != m_vertices.end(); ++i)
+          delete (stored_vertex*)*i;
+        m_vertices.clear();
+        m_edges.clear();
+      }
+      inline adj_list_impl(vertices_size_type num_vertices) {
+        for (vertices_size_type i = 0; i < num_vertices; ++i)
+          add_vertex(static_cast<Derived&>(*this));
+      }
+      template <class EdgeIterator>
+      inline adj_list_impl(vertices_size_type num_vertices,
+                           EdgeIterator first, EdgeIterator last)
+      {
+        vertex_descriptor* v = new vertex_descriptor[num_vertices];
+        for (vertices_size_type i = 0; i < num_vertices; ++i)
+          v[i] = add_vertex(static_cast<Derived&>(*this));
+
+        while (first != last) {
+          add_edge(v[(*first).first], v[(*first).second], *this);
+          ++first;
+        }
+        delete [] v;
+      }
+      template <class EdgeIterator, class EdgePropertyIterator>
+      inline adj_list_impl(vertices_size_type num_vertices,
+                           EdgeIterator first, EdgeIterator last,
+                           EdgePropertyIterator ep_iter)
+      {
+        vertex_descriptor* v = new vertex_descriptor[num_vertices];
+        for (vertices_size_type i = 0; i < num_vertices; ++i)
+          v[i] = add_vertex(static_cast<Derived&>(*this));
+
+        while (first != last) {
+          add_edge(v[(*first).first], v[(*first).second], *ep_iter, *this);
+          ++first;
+          ++ep_iter;
+        }
+        delete [] v;
+      }
+      ~adj_list_impl() {
+        for (typename StoredVertexList::iterator i = m_vertices.begin();
+             i != m_vertices.end(); ++i)
+          delete (stored_vertex*)*i;
+      }
+      //    protected:
+      inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+        stored_vertex* sv = (stored_vertex*)v;
+        return sv->m_out_edges;
+      }
+      inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+        stored_vertex* sv = (stored_vertex*)v;
+        return sv->m_out_edges;
+      }
+      inline StoredVertexList& vertex_set() { return m_vertices; }
+      inline const StoredVertexList& vertex_set() const { return m_vertices; }
+
+      inline void copy_impl(const adj_list_impl& x_)
+      {
+        const Derived& x = static_cast<const Derived&>(x_);
+
+        // Would be better to have a constant time way to get from
+        // vertices in x to the corresponding vertices in *this.
+        std::map<stored_vertex*,stored_vertex*> vertex_map;
+
+        // Copy the stored vertex objects by adding each vertex
+        // and copying its property object.
+        vertex_iterator vi, vi_end;
+        for (boost::tie(vi, vi_end) = vertices(x); vi != vi_end; ++vi) {
+          stored_vertex* v = (stored_vertex*)add_vertex(*this);
+          v->m_property = ((stored_vertex*)*vi)->m_property;
+          vertex_map[(stored_vertex*)*vi] = v;
+        }
+        // Copy the edges by adding each edge and copying its
+        // property object.
+        edge_iterator ei, ei_end;
+        for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+          edge_descriptor e;
+          bool inserted;
+          vertex_descriptor s = source(*ei,x), t = target(*ei,x);
+          boost::tie(e, inserted) = add_edge(vertex_map[(stored_vertex*)s],
+                                             vertex_map[(stored_vertex*)t], *this);
+          *((edge_property_type*)e.m_eproperty)
+            = *((edge_property_type*)(*ei).m_eproperty);
+        }
+      }
+
+
+      typename Config::EdgeContainer m_edges;
+      StoredVertexList m_vertices;
+    };
+
+    // O(1)
+    template <class Derived, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    add_vertex(adj_list_impl<Derived, Config, Base>& g_)
+    {
+      Derived& g = static_cast<Derived&>(g_);
+      typedef typename Config::stored_vertex stored_vertex;
+      stored_vertex* v = new stored_vertex;
+      typename Config::StoredVertexList::iterator pos;
+      bool inserted;
+      boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+      v->m_position = pos;
+      g.added_vertex(v);
+      return v;
+    }
+    // O(1)
+    template <class Derived, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    add_vertex(const typename Config::vertex_property_type& p,
+               adj_list_impl<Derived, Config, Base>& g_)
+    {
+      typedef typename Config::vertex_descriptor vertex_descriptor;
+      Derived& g = static_cast<Derived&>(g_);
+      if (optional<vertex_descriptor> v
+            = g.vertex_by_property(get_property_value(p, vertex_bundle)))
+        return *v;
+
+      typedef typename Config::stored_vertex stored_vertex;
+      stored_vertex* v = new stored_vertex(p);
+      typename Config::StoredVertexList::iterator pos;
+      bool inserted;
+      boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+      v->m_position = pos;
+      g.added_vertex(v);
+      return v;
+    }
+    // O(1)
+    template <class Derived, class Config, class Base>
+    inline void remove_vertex(typename Config::vertex_descriptor u,
+                              adj_list_impl<Derived, Config, Base>& g_)
+    {
+      typedef typename Config::stored_vertex stored_vertex;
+      Derived& g = static_cast<Derived&>(g_);
+      g.removing_vertex(u);
+      stored_vertex* su = (stored_vertex*)u;
+      g.m_vertices.erase(su->m_position);
+      delete su;
+    }
+    // O(V)
+    template <class Derived, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    vertex(typename Config::vertices_size_type n,
+           const adj_list_impl<Derived, Config, Base>& g_)
+    {
+      const Derived& g = static_cast<const Derived&>(g_);
+      typename Config::vertex_iterator i = vertices(g).first;
+      while (n--) ++i; // std::advance(i, n); (not VC++ portable)
+      return *i;
+    }
+
+    //=========================================================================
+    // Vector-Backbone Adjacency List Implementation
+
+    namespace detail {
+
+      template <class Graph, class vertex_descriptor>
+      inline void
+      remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+                             boost::directed_tag)
+      {
+        typedef typename Graph::edge_parallel_category edge_parallel_category;
+        g.m_vertices.erase(g.m_vertices.begin() + u);
+        vertex_descriptor V = num_vertices(g);
+        if (u != V) {
+          for (vertex_descriptor v = 0; v < V; ++v)
+            reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category());
+        }
+      }
+
+      template <class Graph, class vertex_descriptor>
+      inline void
+      remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+                             boost::undirected_tag)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename Graph::edge_parallel_category edge_parallel_category;
+        g.m_vertices.erase(g.m_vertices.begin() + u);
+        vertex_descriptor V = num_vertices(g);
+        for (vertex_descriptor v = 0; v < V; ++v)
+          reindex_edge_list(g.out_edge_list(v), u,
+                            edge_parallel_category());
+        typedef typename Graph::EdgeContainer Container;
+        typedef typename Container::iterator Iter;
+        Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+        for (; ei != ei_end; ++ei) {
+          if (ei->m_source > u)
+            --ei->m_source;
+          if (ei->m_target > u)
+            --ei->m_target;
+        }
+      }
+      template <class Graph, class vertex_descriptor>
+      inline void
+      remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+                             boost::bidirectional_tag)
+      {
+        typedef typename Graph::global_edgelist_selector EdgeListS;
+        BOOST_STATIC_ASSERT((!is_random_access_selector<EdgeListS>::value));
+
+        typedef typename Graph::edge_parallel_category edge_parallel_category;
+        g.m_vertices.erase(g.m_vertices.begin() + u);
+        vertex_descriptor V = num_vertices(g);
+        vertex_descriptor v;
+        if (u != V) {
+          for (v = 0; v < V; ++v)
+            reindex_edge_list(g.out_edge_list(v), u,
+                              edge_parallel_category());
+          for (v = 0; v < V; ++v)
+            reindex_edge_list(in_edge_list(g, v), u,
+                              edge_parallel_category());
+
+          typedef typename Graph::EdgeContainer Container;
+          typedef typename Container::iterator Iter;
+          Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+          for (; ei != ei_end; ++ei) {
+            if (ei->m_source > u)
+              --ei->m_source;
+            if (ei->m_target > u)
+              --ei->m_target;
+          }
+        }
+      }
+
+      template <class EdgeList, class vertex_descriptor>
+      inline void
+      reindex_edge_list(EdgeList& el, vertex_descriptor u,
+                        boost::allow_parallel_edge_tag)
+      {
+        typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+        for (; ei != e_end; ++ei)
+          if ((*ei).get_target() > u)
+            --(*ei).get_target();
+      }
+      template <class EdgeList, class vertex_descriptor>
+      inline void
+      reindex_edge_list(EdgeList& el, vertex_descriptor u,
+                        boost::disallow_parallel_edge_tag)
+      {
+        typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+        while (ei != e_end) {
+          typename EdgeList::value_type ce = *ei;
+          ++ei;
+          if (ce.get_target() > u) {
+            el.erase(ce);
+            --ce.get_target();
+            el.insert(ce);
+          }
+        }
+      }
+    } // namespace detail
+
+    struct vec_adj_list_tag { };
+
+    template <class Graph, class Config, class Base>
+    class vec_adj_list_impl
+      : public adj_list_helper<Config, Base>
+    {
+      typedef typename Config::OutEdgeList OutEdgeList;
+      typedef typename Config::InEdgeList InEdgeList;
+      typedef typename Config::StoredVertexList StoredVertexList;
+    public:
+      typedef typename Config::vertex_descriptor vertex_descriptor;
+      typedef typename Config::edge_descriptor edge_descriptor;
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      typedef typename Config::edge_iterator edge_iterator;
+      typedef typename Config::directed_category directed_category;
+      typedef typename Config::vertices_size_type vertices_size_type;
+      typedef typename Config::edges_size_type edges_size_type;
+      typedef typename Config::degree_size_type degree_size_type;
+      typedef typename Config::StoredEdge StoredEdge;
+      typedef typename Config::stored_vertex stored_vertex;
+      typedef typename Config::EdgeContainer EdgeContainer;
+      typedef typename Config::edge_property_type edge_property_type;
+      typedef vec_adj_list_tag graph_tag;
+
+      static vertex_descriptor null_vertex()
+      {
+        return (std::numeric_limits<vertex_descriptor>::max)();
+      }
+
+      inline vec_adj_list_impl() { }
+
+      inline vec_adj_list_impl(const vec_adj_list_impl& x) {
+        copy_impl(x);
+      }
+      inline vec_adj_list_impl& operator=(const vec_adj_list_impl& x) {
+        this->clear();
+        copy_impl(x);
+        return *this;
+      }
+      inline void clear() {
+        m_vertices.clear();
+        m_edges.clear();
+      }
+
+      inline vec_adj_list_impl(vertices_size_type _num_vertices)
+        : m_vertices(_num_vertices) { }
+
+      template <class EdgeIterator>
+      inline vec_adj_list_impl(vertices_size_type num_vertices,
+                               EdgeIterator first, EdgeIterator last)
+        : m_vertices(num_vertices)
+      {
+        while (first != last) {
+          add_edge((*first).first, (*first).second,
+                   static_cast<Graph&>(*this));
+          ++first;
+        }
+      }
+      template <class EdgeIterator, class EdgePropertyIterator>
+      inline vec_adj_list_impl(vertices_size_type num_vertices,
+                               EdgeIterator first, EdgeIterator last,
+                               EdgePropertyIterator ep_iter)
+        : m_vertices(num_vertices)
+      {
+        while (first != last) {
+          add_edge((*first).first, (*first).second, *ep_iter,
+                   static_cast<Graph&>(*this));
+          ++first;
+          ++ep_iter;
+        }
+      }
+
+      //    protected:
+      inline boost::integer_range<vertex_descriptor> vertex_set() const {
+        return boost::integer_range<vertex_descriptor>(0, m_vertices.size());
+      }
+      inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+        return m_vertices[v].m_out_edges;
+      }
+      inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+        return m_vertices[v].m_out_edges;
+      }
+      inline void copy_impl(const vec_adj_list_impl& x_)
+      {
+        const Graph& x = static_cast<const Graph&>(x_);
+        // Copy the stored vertex objects by adding each vertex
+        // and copying its property object.
+        for (vertices_size_type i = 0; i < num_vertices(x); ++i) {
+          vertex_descriptor v = add_vertex(*this);
+          m_vertices[v].m_property = x.m_vertices[i].m_property;
+        }
+        // Copy the edges by adding each edge and copying its
+        // property object.
+        edge_iterator ei, ei_end;
+        for (boost::tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+          edge_descriptor e;
+          bool inserted;
+          boost::tie(e, inserted) = add_edge(source(*ei,x), target(*ei,x) , *this);
+          *((edge_property_type*)e.m_eproperty)
+            = *((edge_property_type*)(*ei).m_eproperty);
+        }
+      }
+      typename Config::EdgeContainer m_edges;
+      StoredVertexList m_vertices;
+    };
+    // Had to make these non-members to avoid accidental instantiation
+    // on SGI MIPSpro C++
+    template <class G, class C, class B>
+    inline typename C::InEdgeList&
+    in_edge_list(vec_adj_list_impl<G,C,B>& g,
+                 typename C::vertex_descriptor v) {
+      return g.m_vertices[v].m_in_edges;
+    }
+    template <class G, class C, class B>
+    inline const typename C::InEdgeList&
+    in_edge_list(const vec_adj_list_impl<G,C,B>& g,
+                 typename C::vertex_descriptor v) {
+      return g.m_vertices[v].m_in_edges;
+    }
+
+      // O(1)
+    template <class Graph, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    add_vertex(vec_adj_list_impl<Graph, Config, Base>& g_) {
+      Graph& g = static_cast<Graph&>(g_);
+      g.m_vertices.resize(g.m_vertices.size() + 1);
+      g.added_vertex(g.m_vertices.size() - 1);
+      return g.m_vertices.size() - 1;
+    }
+
+    template <class Graph, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    add_vertex(const typename Config::vertex_property_type& p,
+               vec_adj_list_impl<Graph, Config, Base>& g_) {
+      typedef typename Config::vertex_descriptor vertex_descriptor;
+      Graph& g = static_cast<Graph&>(g_);
+      if (optional<vertex_descriptor> v
+            = g.vertex_by_property(get_property_value(p, vertex_bundle)))
+        return *v;
+      typedef typename Config::stored_vertex stored_vertex;
+      g.m_vertices.push_back(stored_vertex(p));
+      g.added_vertex(g.m_vertices.size() - 1);
+      return g.m_vertices.size() - 1;
+    }
+
+    // Here we override the directed_graph_helper add_edge() function
+    // so that the number of vertices is automatically changed if
+    // either u or v is greater than the number of vertices.
+    template <class Graph, class Config, class Base>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             const typename Config::edge_property_type& p,
+             vec_adj_list_impl<Graph, Config, Base>& g_)
+    {
+      BOOST_USING_STD_MAX();
+      typename Config::vertex_descriptor x = max BOOST_PREVENT_MACRO_SUBSTITUTION(u, v);
+      if (x >= num_vertices(g_))
+        g_.m_vertices.resize(x + 1);
+      adj_list_helper<Config, Base>& g = g_;
+      return add_edge(u, v, p, g);
+    }
+    template <class Graph, class Config, class Base>
+    inline std::pair<typename Config::edge_descriptor, bool>
+    add_edge(typename Config::vertex_descriptor u,
+             typename Config::vertex_descriptor v,
+             vec_adj_list_impl<Graph, Config, Base>& g_)
+    {
+      typename Config::edge_property_type p;
+      return add_edge(u, v, p, g_);
+    }
+
+
+    // O(V + E)
+    template <class Graph, class Config, class Base>
+    inline void remove_vertex(typename Config::vertex_descriptor v,
+                              vec_adj_list_impl<Graph, Config, Base>& g_)
+    {
+      typedef typename Config::directed_category Cat;
+      Graph& g = static_cast<Graph&>(g_);
+      g.removing_vertex(v);
+      detail::remove_vertex_dispatch(g, v, Cat());
+    }
+    // O(1)
+    template <class Graph, class Config, class Base>
+    inline typename Config::vertex_descriptor
+    vertex(typename Config::vertices_size_type n,
+           const vec_adj_list_impl<Graph, Config, Base>&)
+    {
+      return n;
+    }
+
+
+  namespace detail {
+
+    //=========================================================================
+    // Adjacency List Generator
+
+    template <class Graph, class VertexListS, class OutEdgeListS,
+              class DirectedS, class VertexProperty, class EdgeProperty,
+              class GraphProperty, class EdgeListS>
+    struct adj_list_gen
+    {
+      // Remove these assertions once PtrContainer support is implemented.
+      BOOST_STATIC_ASSERT((!is_ptr_selector<VertexListS>::value));
+      BOOST_STATIC_ASSERT((!is_ptr_selector<OutEdgeListS>::value));
+      BOOST_STATIC_ASSERT((!is_ptr_selector<EdgeListS>::value));
+
+      typedef typename is_random_access_selector<VertexListS>::type
+        is_rand_access;
+      typedef typename has_property<EdgeProperty>::type has_edge_property;
+      typedef typename DirectedS::is_directed_t DirectedT;
+      typedef typename DirectedS::is_bidir_t BidirectionalT;
+
+      struct config
+      {
+        typedef OutEdgeListS edgelist_selector;
+        typedef EdgeListS global_edgelist_selector;
+
+        typedef Graph graph_type;
+        typedef EdgeProperty edge_property_type;
+        typedef VertexProperty vertex_property_type;
+        typedef GraphProperty graph_property_type;
+        typedef std::size_t vertices_size_type;
+
+        typedef adjacency_list_traits<OutEdgeListS, VertexListS, DirectedS>
+           Traits;
+
+        typedef typename Traits::directed_category directed_category;
+        typedef typename Traits::edge_parallel_category edge_parallel_category;
+        typedef typename Traits::vertex_descriptor vertex_descriptor;
+        typedef typename Traits::edge_descriptor edge_descriptor;
+
+        typedef void* vertex_ptr;
+
+        // need to reorganize this to avoid instantiating stuff
+        // that doesn't get used -JGS
+
+        // VertexList and vertex_iterator
+        typedef typename container_gen<VertexListS,
+          vertex_ptr>::type SeqVertexList;
+        typedef boost::integer_range<vertex_descriptor> RandVertexList;
+        typedef typename mpl::if_<is_rand_access,
+          RandVertexList, SeqVertexList>::type VertexList;
+
+        typedef typename VertexList::iterator vertex_iterator;
+
+        // EdgeContainer and StoredEdge
+
+        typedef typename container_gen<EdgeListS,
+          list_edge<vertex_descriptor, EdgeProperty> >::type EdgeContainer;
+
+        typedef typename mpl::and_<DirectedT,
+             typename mpl::not_<BidirectionalT>::type >::type on_edge_storage;
+
+        typedef typename mpl::if_<on_edge_storage,
+          std::size_t, typename EdgeContainer::size_type
+        >::type edges_size_type;
+
+        typedef typename EdgeContainer::iterator EdgeIter;
+
+        typedef typename is_random_access_selector<EdgeListS>::type is_edge_ra;
+
+        typedef typename mpl::if_<on_edge_storage,
+          stored_edge_property<vertex_descriptor, EdgeProperty>,
+          typename mpl::if_<is_edge_ra,
+            stored_ra_edge_iter<vertex_descriptor, EdgeContainer, EdgeProperty>,
+            stored_edge_iter<vertex_descriptor, EdgeIter, EdgeProperty>
+          >::type
+        >::type StoredEdge;
+
+        // Adjacency Types
+
+        typedef typename container_gen<OutEdgeListS, StoredEdge>::type
+          OutEdgeList;
+        typedef typename OutEdgeList::size_type degree_size_type;
+        typedef typename OutEdgeList::iterator OutEdgeIter;
+
+        typedef boost::detail::iterator_traits<OutEdgeIter> OutEdgeIterTraits;
+        typedef typename OutEdgeIterTraits::iterator_category OutEdgeIterCat;
+        typedef typename OutEdgeIterTraits::difference_type OutEdgeIterDiff;
+
+        typedef out_edge_iter<
+            OutEdgeIter, vertex_descriptor, edge_descriptor, OutEdgeIterDiff
+        > out_edge_iterator;
+
+        typedef typename adjacency_iterator_generator<graph_type,
+           vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+        typedef OutEdgeList InEdgeList;
+        typedef OutEdgeIter InEdgeIter;
+        typedef OutEdgeIterCat InEdgeIterCat;
+        typedef OutEdgeIterDiff InEdgeIterDiff;
+
+        typedef in_edge_iter<
+            InEdgeIter, vertex_descriptor, edge_descriptor, InEdgeIterDiff
+        > in_edge_iterator;
+
+        typedef typename inv_adjacency_iterator_generator<graph_type,
+           vertex_descriptor, in_edge_iterator>::type inv_adjacency_iterator;
+
+        // Edge Iterator
+
+        typedef boost::detail::iterator_traits<EdgeIter> EdgeIterTraits;
+        typedef typename EdgeIterTraits::iterator_category EdgeIterCat;
+        typedef typename EdgeIterTraits::difference_type EdgeIterDiff;
+
+        typedef undirected_edge_iter<
+            EdgeIter
+          , edge_descriptor
+          , EdgeIterDiff
+        > UndirectedEdgeIter; // also used for bidirectional
+
+        typedef adj_list_edge_iterator<vertex_iterator, out_edge_iterator,
+           graph_type> DirectedEdgeIter;
+
+        typedef typename mpl::if_<on_edge_storage,
+          DirectedEdgeIter, UndirectedEdgeIter>::type edge_iterator;
+
+        // stored_vertex and StoredVertexList
+        typedef typename container_gen<VertexListS, vertex_ptr>::type
+          SeqStoredVertexList;
+        struct seq_stored_vertex {
+          seq_stored_vertex() { }
+          seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+          OutEdgeList m_out_edges;
+          VertexProperty m_property;
+          typename SeqStoredVertexList::iterator m_position;
+        };
+        struct bidir_seq_stored_vertex {
+          bidir_seq_stored_vertex() { }
+          bidir_seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+          OutEdgeList m_out_edges;
+          InEdgeList m_in_edges;
+          VertexProperty m_property;
+          typename SeqStoredVertexList::iterator m_position;
+        };
+        struct rand_stored_vertex {
+          rand_stored_vertex() { }
+          rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+          OutEdgeList m_out_edges;
+          VertexProperty m_property;
+        };
+        struct bidir_rand_stored_vertex {
+          bidir_rand_stored_vertex() { }
+          bidir_rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+          OutEdgeList m_out_edges;
+          InEdgeList m_in_edges;
+          VertexProperty m_property;
+        };
+        typedef typename mpl::if_<is_rand_access,
+          typename mpl::if_<BidirectionalT,
+            bidir_rand_stored_vertex, rand_stored_vertex>::type,
+          typename mpl::if_<BidirectionalT,
+            bidir_seq_stored_vertex, seq_stored_vertex>::type
+        >::type StoredVertex;
+        struct stored_vertex : public StoredVertex {
+          stored_vertex() { }
+          stored_vertex(const VertexProperty& p) : StoredVertex(p) { }
+        };
+
+        typedef typename container_gen<VertexListS, stored_vertex>::type
+          RandStoredVertexList;
+        typedef typename mpl::if_< is_rand_access,
+          RandStoredVertexList, SeqStoredVertexList>::type StoredVertexList;
+      }; // end of config
+
+
+      typedef typename mpl::if_<BidirectionalT,
+        bidirectional_graph_helper_with_property<config>,
+        typename mpl::if_<DirectedT,
+          directed_graph_helper<config>,
+          undirected_graph_helper<config>
+        >::type
+      >::type DirectedHelper;
+
+      typedef typename mpl::if_<is_rand_access,
+        vec_adj_list_impl<Graph, config, DirectedHelper>,
+        adj_list_impl<Graph, config, DirectedHelper>
+      >::type type;
+
+    };
+
+  } // namespace detail
+
+    //=========================================================================
+    // Vertex Property Maps
+
+    template <class Graph, class ValueType, class Reference, class Tag>
+    struct adj_list_vertex_property_map
+      : public boost::put_get_helper<
+          Reference,
+          adj_list_vertex_property_map<Graph, ValueType, Reference, Tag>
+        >
+    {
+      typedef typename Graph::stored_vertex StoredVertex;
+      typedef ValueType value_type;
+      typedef Reference reference;
+      typedef typename Graph::vertex_descriptor key_type;
+      typedef boost::lvalue_property_map_tag category;
+      inline adj_list_vertex_property_map() { }
+      inline adj_list_vertex_property_map(const Graph*) { }
+      inline Reference operator[](key_type v) const {
+        StoredVertex* sv = (StoredVertex*)v;
+        return get_property_value(sv->m_property, Tag());
+      }
+      inline Reference operator()(key_type v) const {
+        return this->operator[](v);
+      }
+    };
+
+    template <class Graph, class Property, class PropRef>
+    struct adj_list_vertex_all_properties_map
+      : public boost::put_get_helper<PropRef,
+          adj_list_vertex_all_properties_map<Graph, Property, PropRef>
+        >
+    {
+      typedef typename Graph::stored_vertex StoredVertex;
+      typedef Property value_type;
+      typedef PropRef reference;
+      typedef typename Graph::vertex_descriptor key_type;
+      typedef boost::lvalue_property_map_tag category;
+      inline adj_list_vertex_all_properties_map() { }
+      inline adj_list_vertex_all_properties_map(const Graph*) { }
+      inline PropRef operator[](key_type v) const {
+        StoredVertex* sv = (StoredVertex*)v;
+        return sv->m_property;
+      }
+      inline PropRef operator()(key_type v) const {
+        return this->operator[](v);
+      }
+    };
+
+    template <class Graph, class GraphPtr, class ValueType, class Reference,
+              class Tag>
+    struct vec_adj_list_vertex_property_map
+      : public boost::put_get_helper<
+          Reference,
+          vec_adj_list_vertex_property_map<Graph,GraphPtr,ValueType,Reference,
+             Tag>
+        >
+    {
+      typedef ValueType value_type;
+      typedef Reference reference;
+      typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+      typedef boost::lvalue_property_map_tag category;
+      vec_adj_list_vertex_property_map() { }
+      vec_adj_list_vertex_property_map(GraphPtr g) : m_g(g) { }
+      inline Reference operator[](key_type v) const {
+        return get_property_value(m_g->m_vertices[v].m_property,  Tag());
+      }
+      inline Reference operator()(key_type v) const {
+        return this->operator[](v);
+      }
+      GraphPtr m_g;
+    };
+
+    template <class Graph, class GraphPtr, class Property, class PropertyRef>
+    struct vec_adj_list_vertex_all_properties_map
+      : public boost::put_get_helper<PropertyRef,
+          vec_adj_list_vertex_all_properties_map<Graph,GraphPtr,Property,
+            PropertyRef>
+        >
+    {
+      typedef Property value_type;
+      typedef PropertyRef reference;
+      typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+      typedef boost::lvalue_property_map_tag category;
+      vec_adj_list_vertex_all_properties_map() { }
+      vec_adj_list_vertex_all_properties_map(GraphPtr g) : m_g(g) { }
+      inline PropertyRef operator[](key_type v) const {
+        return m_g->m_vertices[v].m_property;
+      }
+      inline PropertyRef operator()(key_type v) const {
+        return this->operator[](v);
+      }
+      GraphPtr m_g;
+    };
+
+    struct adj_list_any_vertex_pa {
+      template <class Tag, class Graph, class Property>
+      struct bind_ {
+        typedef typename property_value<Property, Tag>::type value_type;
+        typedef value_type& reference;
+        typedef const value_type& const_reference;
+
+        typedef adj_list_vertex_property_map
+          <Graph, value_type, reference, Tag> type;
+        typedef adj_list_vertex_property_map
+          <Graph, value_type, const_reference, Tag> const_type;
+      };
+    };
+    struct adj_list_all_vertex_pa {
+      template <class Tag, class Graph, class Property>
+      struct bind_ {
+        typedef typename Graph::vertex_descriptor Vertex;
+        typedef adj_list_vertex_all_properties_map<Graph,Property,
+          Property&> type;
+        typedef adj_list_vertex_all_properties_map<Graph,Property,
+          const Property&> const_type;
+      };
+    };
+
+    template <class Property, class Vertex>
+    struct vec_adj_list_vertex_id_map
+      : public boost::put_get_helper<
+          Vertex, vec_adj_list_vertex_id_map<Property, Vertex>
+        >
+    {
+      typedef Vertex value_type;
+      typedef Vertex key_type;
+      typedef Vertex reference;
+      typedef boost::readable_property_map_tag category;
+      inline vec_adj_list_vertex_id_map() { }
+      template <class Graph>
+      inline vec_adj_list_vertex_id_map(const Graph&) { }
+      inline value_type operator[](key_type v) const { return v; }
+      inline value_type operator()(key_type v) const { return v; }
+    };
+
+    struct vec_adj_list_any_vertex_pa {
+      template <class Tag, class Graph, class Property>
+      struct bind_ {
+        typedef typename property_value<Property, Tag>::type value_type;
+        typedef value_type& reference;
+        typedef const value_type& const_reference;
+
+        typedef vec_adj_list_vertex_property_map
+          <Graph, Graph*, value_type, reference, Tag> type;
+        typedef vec_adj_list_vertex_property_map
+          <Graph, const Graph*, value_type, const_reference, Tag> const_type;
+      };
+    };
+    struct vec_adj_list_id_vertex_pa {
+      template <class Tag, class Graph, class Property>
+      struct bind_ {
+        typedef typename Graph::vertex_descriptor Vertex;
+        typedef vec_adj_list_vertex_id_map<Property, Vertex> type;
+        typedef vec_adj_list_vertex_id_map<Property, Vertex> const_type;
+      };
+    };
+    struct vec_adj_list_all_vertex_pa {
+      template <class Tag, class Graph, class Property>
+      struct bind_ {
+        typedef typename Graph::vertex_descriptor Vertex;
+        typedef vec_adj_list_vertex_all_properties_map
+          <Graph, Graph*, Property, Property&> type;
+        typedef vec_adj_list_vertex_all_properties_map
+          <Graph, const Graph*, Property, const Property&> const_type;
+      };
+    };
+  namespace detail {
+    template <class Tag>
+    struct adj_list_choose_vertex_pa_helper {
+      typedef adj_list_any_vertex_pa type;
+    };
+    template <>
+    struct adj_list_choose_vertex_pa_helper<vertex_all_t> {
+      typedef adj_list_all_vertex_pa type;
+    };
+    template <class Tag, class Graph, class Property>
+    struct adj_list_choose_vertex_pa {
+      typedef typename adj_list_choose_vertex_pa_helper<Tag>::type Helper;
+      typedef typename Helper::template bind_<Tag,Graph,Property> Bind;
+      typedef typename Bind::type type;
+      typedef typename Bind::const_type const_type;
+    };
+
+
+    template <class Tag>
+    struct vec_adj_list_choose_vertex_pa_helper {
+      typedef vec_adj_list_any_vertex_pa type;
+    };
+    template <>
+    struct vec_adj_list_choose_vertex_pa_helper<vertex_index_t> {
+      typedef vec_adj_list_id_vertex_pa type;
+    };
+    template <>
+    struct vec_adj_list_choose_vertex_pa_helper<vertex_all_t> {
+      typedef vec_adj_list_all_vertex_pa type;
+    };
+    template <class Tag, class Graph, class Property>
+    struct vec_adj_list_choose_vertex_pa {
+      typedef typename vec_adj_list_choose_vertex_pa_helper<Tag>::type Helper;
+      typedef typename Helper::template bind_<Tag,Graph,Property> Bind;
+      typedef typename Bind::type type;
+      typedef typename Bind::const_type const_type;
+    };
+  } // namespace detail
+
+    //=========================================================================
+    // Edge Property Map
+
+    template <class Directed, class Value, class Ref, class Vertex,
+              class Property, class Tag>
+    struct adj_list_edge_property_map
+      : public put_get_helper<
+          Ref,
+          adj_list_edge_property_map<Directed, Value, Ref, Vertex, Property,
+            Tag>
+        >
+    {
+      typedef Value value_type;
+      typedef Ref reference;
+      typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+      typedef boost::lvalue_property_map_tag category;
+      inline Ref operator[](key_type e) const {
+        Property& p = *(Property*)e.get_property();
+        return get_property_value(p, Tag());
+      }
+      inline Ref operator()(key_type e) const {
+        return this->operator[](e);
+      }
+    };
+
+    template <class Directed, class Property, class PropRef, class PropPtr,
+      class Vertex>
+    struct adj_list_edge_all_properties_map
+      : public put_get_helper<PropRef,
+          adj_list_edge_all_properties_map<Directed, Property, PropRef,
+            PropPtr, Vertex>
+        >
+    {
+      typedef Property value_type;
+      typedef PropRef reference;
+      typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+      typedef boost::lvalue_property_map_tag category;
+      inline PropRef operator[](key_type e) const {
+        return *(PropPtr)e.get_property();
+      }
+      inline PropRef operator()(key_type e) const {
+        return this->operator[](e);
+      }
+    };
+
+  // Edge Property Maps
+
+  namespace detail {
+    struct adj_list_any_edge_pmap {
+      template <class Graph, class Property, class Tag>
+      struct bind_ {
+        typedef typename property_value<Property,Tag>::type value_type;
+        typedef value_type& reference;
+        typedef const value_type& const_reference;
+
+        typedef adj_list_edge_property_map
+           <typename Graph::directed_category, value_type, reference,
+            typename Graph::vertex_descriptor,Property,Tag> type;
+        typedef adj_list_edge_property_map
+           <typename Graph::directed_category, value_type, const_reference,
+            typename Graph::vertex_descriptor,const Property, Tag> const_type;
+      };
+    };
+    struct adj_list_all_edge_pmap {
+      template <class Graph, class Property, class Tag>
+      struct bind_ {
+        typedef adj_list_edge_all_properties_map
+        <typename Graph::directed_category, Property, Property&, Property*,
+            typename Graph::vertex_descriptor> type;
+        typedef adj_list_edge_all_properties_map
+        <typename Graph::directed_category, Property, const Property&,
+            const Property*, typename Graph::vertex_descriptor> const_type;
+      };
+    };
+
+    template <class Tag>
+    struct adj_list_choose_edge_pmap_helper {
+      typedef adj_list_any_edge_pmap type;
+    };
+    template <>
+    struct adj_list_choose_edge_pmap_helper<edge_all_t> {
+      typedef adj_list_all_edge_pmap type;
+    };
+    template <class Tag, class Graph, class Property>
+    struct adj_list_choose_edge_pmap {
+      typedef typename adj_list_choose_edge_pmap_helper<Tag>::type Helper;
+      typedef typename Helper::template bind_<Graph,Property,Tag> Bind;
+      typedef typename Bind::type type;
+      typedef typename Bind::const_type const_type;
+    };
+    struct adj_list_edge_property_selector {
+      template <class Graph, class Property, class Tag>
+      struct bind_ {
+        typedef adj_list_choose_edge_pmap<Tag,Graph,Property> Choice;
+        typedef typename Choice::type type;
+        typedef typename Choice::const_type const_type;
+      };
+    };
+  } // namespace detail
+
+  template <>
+  struct edge_property_selector<adj_list_tag> {
+    typedef detail::adj_list_edge_property_selector type;
+  };
+  template <>
+  struct edge_property_selector<vec_adj_list_tag> {
+    typedef detail::adj_list_edge_property_selector type;
+  };
+
+  // Vertex Property Maps
+
+  struct adj_list_vertex_property_selector {
+    template <class Graph, class Property, class Tag>
+    struct bind_ {
+      typedef detail::adj_list_choose_vertex_pa<Tag,Graph,Property> Choice;
+      typedef typename Choice::type type;
+      typedef typename Choice::const_type const_type;
+    };
+  };
+  template <>
+  struct vertex_property_selector<adj_list_tag> {
+    typedef adj_list_vertex_property_selector type;
+  };
+
+  struct vec_adj_list_vertex_property_selector {
+    template <class Graph, class Property, class Tag>
+    struct bind_ {
+      typedef detail::vec_adj_list_choose_vertex_pa<Tag,Graph,Property> Choice;
+      typedef typename Choice::type type;
+      typedef typename Choice::const_type const_type;
+    };
+  };
+  template <>
+  struct vertex_property_selector<vec_adj_list_tag> {
+    typedef vec_adj_list_vertex_property_selector type;
+  };
+
+} // namespace boost
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace boost {
+
+  #if BOOST_WORKAROUND( _STLPORT_VERSION, >= 0x500 )
+  // STLport 5 already defines a hash<void*> specialization.
+  #else
+  template <>
+  struct hash< void* > // Need this when vertex_descriptor=void*
+  {
+    std::size_t
+    operator()(void* v) const { return (std::size_t)v; }
+  };
+  #endif
+
+  template <typename V>
+  struct hash< boost::detail::stored_edge<V> >
+  {
+    std::size_t
+    operator()(const boost::detail::stored_edge<V>& e) const
+    {
+      return hash<V>()(e.m_target);
+    }
+  };
+
+  template <typename V, typename P>
+  struct hash< boost::detail::stored_edge_property <V,P> >
+  {
+    std::size_t
+    operator()(const boost::detail::stored_edge_property<V,P>& e) const
+    {
+      return hash<V>()(e.m_target);
+    }
+  };
+
+  template <typename V, typename I, typename P>
+  struct hash< boost::detail::stored_edge_iter<V,I, P> >
+  {
+    std::size_t
+    operator()(const boost::detail::stored_edge_iter<V,I,P>& e) const
+    {
+      return hash<V>()(e.m_target);
+    }
+  };
+
+}
+#endif
+
+
+#undef stored_edge
+#undef stored_edge_property
+#undef stored_edge_iter
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of the concept checking class
+#undef Graph
+#endif
+
+#endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT
+
+/*
+  Implementation Notes:
+
+  Many of the public interface functions in this file would have been
+  more conveniently implemented as inline friend functions.
+  However there are a few compiler bugs that make that approach
+  non-portable.
+
+  1. g++ inline friend in namespace bug
+  2. g++ using clause doesn't work with inline friends
+  3. VC++ doesn't have Koenig lookup
+
+  For these reasons, the functions were all written as non-inline free
+  functions, and static cast was used to convert from the helper
+  class to the adjacency_list derived class.
+
+  Looking back, it might have been better to write out all functions
+  in terms of the adjacency_list, and then use a tag to dispatch
+  to the various helpers instead of using inheritance.
+
+ */
Added: sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/graph/detail/metafunction/is_front_insertion_sequence.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,51 @@
+// 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_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+#define BOOST_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+
+#include <iterator>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/detail/metafunction/is_sequence.hpp>
+
+namespace boost { namespace graph_detail {
+
+    // Major BGL assumption:
+    // A Front Insertion Sequence is a Sequence without
+    // Bidirectional Iterators.
+    template <typename T>
+    struct is_front_insertion_sequence_impl
+      : ::boost::mpl::if_<
+            ::std::tr1::is_convertible<
+                typename ::boost::BOOST_ITERATOR_CATEGORY<
+                    typename T::iterator
+                >::type
+              , ::std::bidirectional_iterator_tag
+            >
+          , ::boost::mpl::false_
+          , ::boost::mpl::true_
+        >
+    {
+    };
+
+    template <typename T>
+    struct is_front_insertion_sequence
+      : ::boost::mpl::eval_if<
+            ::boost::detail::metafunction::is_sequence<T>
+          , is_front_insertion_sequence_impl<T>
+          , ::boost::mpl::false_
+        >::type
+    {
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_front_insertion_sequence,(T))
+    };
+}}  // namespace boost::graph_detail
+
+#endif  // BOOST_GRAPH_DETAIL_METAFUNCTION_IS_FRONT_INSERTION_SEQUENCE_HPP
+
Added: sandbox/container_gen/boost/pending/container_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/pending/container_traits.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,863 @@
+//  (C) Copyright Jeremy Siek 2004 
+//  (C) Copyright Thomas Claveirole 2010
+//  (C) Copyright Ignacy Gawedzki 2010
+//  (C) Copyright Cromwell D. Enage 2012
+//  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_GRAPH_DETAIL_CONTAINER_TRAITS_H
+#define BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/next_prior.hpp>
+#include <algorithm>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX
+
+// Sure would be nice to be able to forward declare these
+// instead of pulling in all the headers. Too bad that
+// is not legal. There ought to be a standard <stlfwd> header. -JGS 
+
+#include <vector>
+#include <list>
+#include <set>
+#include <map>
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SLIST
+#  ifdef BOOST_SLIST_HEADER
+#    include BOOST_SLIST_HEADER
+#  else
+#    include <slist>
+#  endif
+#endif
+
+#if defined BOOST_HAS_HASH
+#  if defined BOOST_HASH_SET_HEADER
+#    include BOOST_HASH_SET_HEADER
+#  else
+#    include <hash_set>
+#  endif
+#  if defined BOOST_HASH_MAP_HEADER
+#    include BOOST_HASH_MAP_HEADER
+#  else
+#    include <hash_map>
+#  endif
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of concept checking class templates
+# define Container Container_
+# define AssociativeContainer AssociativeContainer_
+#endif
+
+// The content of this file is in 'graph_detail' because otherwise
+// there will be name clashes with 
+// sandbox/boost/sequence_algo/container_traits.hpp
+// The 'detail' subnamespace will still cause problems.
+namespace boost { namespace graph_detail {
+
+  //======================================================================
+  // Container Category Tags
+  //
+  //   They use virtual inheritance because there are lots of
+  //   inheritance diamonds.
+
+  struct container_tag { };
+  struct forward_container_tag : virtual public container_tag { };
+  struct reversible_container_tag : virtual public forward_container_tag { };
+  struct random_access_container_tag
+    : virtual public reversible_container_tag { };
+  
+  struct sequence_tag : virtual public forward_container_tag { };
+
+  struct associative_container_tag : virtual public forward_container_tag { };
+
+  struct sorted_associative_container_tag 
+    : virtual public associative_container_tag,
+      virtual public reversible_container_tag { };
+
+  struct front_insertion_sequence_tag : virtual public sequence_tag { };
+  struct back_insertion_sequence_tag : virtual public sequence_tag { };
+
+  struct unique_associative_container_tag 
+    : virtual public associative_container_tag { };
+  struct multiple_associative_container_tag 
+    : virtual public associative_container_tag { };
+  struct simple_associative_container_tag 
+    : virtual public associative_container_tag { };
+  struct pair_associative_container_tag 
+    : virtual public associative_container_tag { };
+
+
+  //======================================================================
+  // Iterator Stability Tags
+  //
+  // Do mutating operations such as insert/erase/resize invalidate all
+  // outstanding iterators?
+
+  struct stable_tag { };
+  struct unstable_tag { };
+
+  //======================================================================
+  // Container Traits Class and container_category() function
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  // don't use this unless there is partial specialization 
+  template <class Container>
+  struct container_traits {
+    typedef typename Container::category category;
+    typedef typename Container::iterator_stability iterator_stability;
+  };
+#endif
+
+  // Use this as a compile-time assertion that X is stable
+  inline void require_stable(stable_tag) { }
+
+  // std::vector
+  struct vector_tag :
+    virtual public random_access_container_tag,
+    virtual public back_insertion_sequence_tag { };
+
+  template <class T, class Alloc>
+  vector_tag container_category(const std::vector<T,Alloc>&)
+    { return vector_tag(); }
+
+  template <class T, class Alloc>
+  unstable_tag iterator_stability(const std::vector<T,Alloc>&)
+    { return unstable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class T, class Alloc>
+  struct container_traits< std::vector<T,Alloc> > {
+    typedef vector_tag category;
+    typedef unstable_tag iterator_stability;
+  };
+#endif
+
+  // std::list
+  struct list_tag :
+    virtual public reversible_container_tag,
+    virtual public back_insertion_sequence_tag
+    // this causes problems for push_dispatch...
+    //    virtual public front_insertion_sequence_tag
+    { };
+
+  template <class T, class Alloc>
+  list_tag container_category(const std::list<T,Alloc>&)
+    { return list_tag(); }
+
+  template <class T, class Alloc>
+  stable_tag iterator_stability(const std::list<T,Alloc>&)
+    { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class T, class Alloc>
+  struct container_traits< std::list<T,Alloc> > {
+    typedef list_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+
+
+  // std::slist
+#if !defined BOOST_NO_SLIST
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class T, class Alloc>
+  struct container_traits<BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc> > {
+    typedef front_insertion_sequence_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+  template <class T, class Alloc>
+  front_insertion_sequence_tag container_category(
+    const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
+  )
+    { return front_insertion_sequence_tag(); }
+
+  template <class T, class Alloc>
+  stable_tag iterator_stability(
+    const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
+  )
+    { return stable_tag(); }
+#endif
+
+
+  // std::set
+  struct set_tag :
+    virtual public sorted_associative_container_tag,
+    virtual public simple_associative_container_tag,
+    virtual public unique_associative_container_tag 
+    { };
+
+  template <class Key, class Cmp, class Alloc> 
+  set_tag container_category(const std::set<Key,Cmp,Alloc>&)
+  { return set_tag(); }
+
+  template <class Key, class Cmp, class Alloc> 
+  stable_tag iterator_stability(const std::set<Key,Cmp,Alloc>&)
+  { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class Key, class Cmp, class Alloc> 
+  struct container_traits< std::set<Key,Cmp,Alloc> > {
+    typedef set_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+
+  // std::multiset
+  struct multiset_tag :
+    virtual public sorted_associative_container_tag,
+    virtual public simple_associative_container_tag,
+    virtual public multiple_associative_container_tag 
+    { };
+
+  template <class Key, class Cmp, class Alloc> 
+  multiset_tag container_category(const std::multiset<Key,Cmp,Alloc>&)
+  { return multiset_tag(); }
+
+  template <class Key, class Cmp, class Alloc> 
+  stable_tag iterator_stability(const std::multiset<Key,Cmp,Alloc>&)
+  { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class Key, class Cmp, class Alloc> 
+  struct container_traits< std::multiset<Key,Cmp,Alloc> > {
+    typedef multiset_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+
+  // deque
+
+  // std::map
+  struct map_tag :
+    virtual public sorted_associative_container_tag,
+    virtual public pair_associative_container_tag,
+    virtual public unique_associative_container_tag 
+    { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class Key, class T, class Cmp, class Alloc> 
+  struct container_traits< std::map<Key,T,Cmp,Alloc> > {
+    typedef map_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+
+  template <class Key, class T, class Cmp, class Alloc> 
+  map_tag container_category(const std::map<Key,T,Cmp,Alloc>&)
+  { return map_tag(); }
+
+  template <class Key, class T, class Cmp, class Alloc> 
+  stable_tag iterator_stability(const std::map<Key,T,Cmp,Alloc>&)
+  { return stable_tag(); }
+
+  // std::multimap
+  struct multimap_tag :
+    virtual public sorted_associative_container_tag,
+    virtual public pair_associative_container_tag,
+    virtual public multiple_associative_container_tag 
+    { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class Key, class T, class Cmp, class Alloc> 
+  struct container_traits< std::multimap<Key,T,Cmp,Alloc> > {
+    typedef multimap_tag category;
+    typedef stable_tag iterator_stability;
+  };
+#endif
+
+  template <class Key, class T, class Cmp, class Alloc> 
+  multimap_tag container_category(const std::multimap<Key,T,Cmp,Alloc>&)
+  { return multimap_tag(); }
+
+  template <class Key, class T, class Cmp, class Alloc> 
+  stable_tag iterator_stability(const std::multimap<Key,T,Cmp,Alloc>&)
+  { return stable_tag(); }
+
+
+ // hash_set, hash_map
+
+  struct unordered_set_tag :
+    virtual public simple_associative_container_tag,
+    virtual public unique_associative_container_tag
+    { };
+
+  struct unordered_multiset_tag :
+    virtual public simple_associative_container_tag,
+    virtual public multiple_associative_container_tag
+    { };
+
+
+  struct unordered_map_tag :
+    virtual public pair_associative_container_tag,
+    virtual public unique_associative_container_tag
+    { };
+
+  struct unordered_multimap_tag :
+    virtual public pair_associative_container_tag,
+    virtual public multiple_associative_container_tag
+    { };
+
+#if defined BOOST_HAS_HASH
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class Key, class Eq, class Hash, class Alloc> 
+  struct container_traits<
+    BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>
+  > {
+    typedef unordered_set_tag category;
+    typedef unstable_tag iterator_stability;
+  };
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  struct container_traits<
+    BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>
+  > {
+    typedef unordered_map_tag category;
+    typedef unstable_tag iterator_stability;
+  };
+  template <class Key, class Eq, class Hash, class Alloc>
+  struct container_traits<
+    BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>
+  > {
+    typedef unordered_multiset_tag category;
+    typedef unstable_tag iterator_stability;
+  };
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  struct container_traits<
+    BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>
+  > {
+    typedef unordered_multimap_tag category;
+    typedef unstable_tag iterator_stability;
+  };
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+  template <class Key, class Eq, class Hash, class Alloc>
+  unordered_set_tag container_category(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&
+  )
+  { return unordered_set_tag(); }
+
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  unordered_map_tag container_category(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&
+  )
+  { return unordered_map_tag(); }
+
+  template <class Key, class Eq, class Hash, class Alloc>
+  unstable_tag iterator_stability(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&
+  )
+  { return unstable_tag(); }
+
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  unstable_tag iterator_stability(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&
+  )
+  { return unstable_tag(); }
+  template <class Key, class Eq, class Hash, class Alloc>
+  unordered_multiset_tag container_category(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>&
+  )
+  { return unordered_multiset_tag(); }
+
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  unordered_multimap_tag container_category(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>&
+  )
+  { return unordered_multimap_tag(); }
+
+  template <class Key, class Eq, class Hash, class Alloc>
+  unstable_tag iterator_stability(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<Key,Eq,Hash,Alloc>&
+  )
+  { return unstable_tag(); }
+
+  template <class Key, class T, class Eq, class Hash, class Alloc>
+  unstable_tag iterator_stability(
+    const BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<Key,T,Eq,Hash,Alloc>&
+  )
+  { return unstable_tag(); }
+#endif  // BOOST_HAS_HASH
+
+
+
+  //===========================================================================
+  // Generalized Container Functions
+
+
+  // Erase
+  template <class Sequence, class T>
+  void erase_dispatch(Sequence& c, const T& x, 
+                      sequence_tag)
+  {
+    c.erase(std::remove(c.begin(), c.end(), x), c.end());
+  }
+
+  template <class AssociativeContainer, class T>
+  void erase_dispatch(AssociativeContainer& c, const T& x, 
+                      associative_container_tag)
+  {
+    c.erase(x);
+  }
+  template <class Container, class T>
+  void erase(Container& c, const T& x)
+  {
+    erase_dispatch(c, x, container_category(c));
+  }
+
+  // Erase If
+  template <class Sequence, class Predicate, class IteratorStability>
+  void erase_if_dispatch(Sequence& c, Predicate p,
+                         sequence_tag, IteratorStability)
+  {
+#if 0
+    c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#else
+    if (! c.empty())
+      c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#endif
+  }
+  template <class AssociativeContainer, class Predicate>
+  void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+                         associative_container_tag, stable_tag)
+  {
+    typename AssociativeContainer::iterator i, next;
+    for (i = next = c.begin(); next != c.end(); i = next) {
+      ++next;
+      if (p(*i))
+        c.erase(i);
+    }
+  }
+  template <class AssociativeContainer, class Predicate>
+  void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+                         associative_container_tag, unstable_tag)
+  {
+    // This method is really slow, so hopefully we won't have any
+    // associative containers with unstable iterators!
+    // Is there a better way to do this?
+    typename AssociativeContainer::iterator i;
+    typename AssociativeContainer::size_type n = c.size();
+    while (n--)
+      for (i = c.begin(); i != c.end(); ++i)
+        if (p(*i)) {
+          c.erase(i);
+          break;
+        }
+  }
+  template <class Container, class Predicate>
+  void erase_if(Container& c, Predicate p)
+  {
+    erase_if_dispatch(c, p, container_category(c), iterator_stability(c));
+  }
+
+  // Push
+  template <class Container, class T>
+  std::pair<typename Container::iterator, bool>
+  push_dispatch(Container& c, const T& v, back_insertion_sequence_tag)
+  {
+    c.push_back(v);
+    return std::make_pair(boost::prior(c.end()), true);
+  }
+
+  template <class Container, class T>
+  std::pair<typename Container::iterator, bool>
+  push_dispatch(Container& c, const T& v, front_insertion_sequence_tag)
+  {
+    c.push_front(v);
+    return std::make_pair(c.begin(), true);
+  }
+
+  template <class AssociativeContainer, class T>
+  std::pair<typename AssociativeContainer::iterator, bool>
+  push_dispatch(AssociativeContainer& c, const T& v, 
+                unique_associative_container_tag)
+  {
+    return c.insert(v);
+  }
+
+  template <class AssociativeContainer, class T>
+  std::pair<typename AssociativeContainer::iterator, bool>
+  push_dispatch(AssociativeContainer& c, const T& v,
+                multiple_associative_container_tag)
+  {
+    return std::make_pair(c.insert(v), true);
+  }
+
+  template <class Container, class T>
+  std::pair<typename Container::iterator,bool>
+  push(Container& c, const T& v)
+  {
+    return push_dispatch(c, v, container_category(c));
+  }
+
+  // Find
+  template <class Container, class Value>
+  typename Container::iterator
+  find_dispatch(Container& c,
+                const Value& value,
+                container_tag)
+  {
+    return std::find(c.begin(), c.end(), value);
+  }
+
+  template <class AssociativeContainer, class Value>
+  typename AssociativeContainer::iterator
+  find_dispatch(AssociativeContainer& c,
+                const Value& value,
+                associative_container_tag)
+  {
+    return c.find(value);
+  }
+
+  template <class Container, class Value>
+  typename Container::iterator
+  find(Container& c,
+       const Value& value)
+  {
+    return find_dispatch(c, value, graph_detail::container_category(c));
+  }
+
+  // Find (const versions)
+  template <class Container, class Value>
+  typename Container::const_iterator
+  find_dispatch(const Container& c,
+                const Value& value,
+                container_tag)
+  {
+    return std::find(c.begin(), c.end(), value);
+  }
+
+  template <class AssociativeContainer, class Value>
+  typename AssociativeContainer::const_iterator
+  find_dispatch(const AssociativeContainer& c,
+                const Value& value,
+                associative_container_tag)
+  {
+    return c.find(value);
+  }
+
+  template <class Container, class Value>
+  typename Container::const_iterator
+  find(const Container& c,
+       const Value& value)
+  {
+    return find_dispatch(c, value, graph_detail::container_category(c));
+  }
+
+  // Equal range
+#if 0
+  // Make the dispatch fail if c is not an Associative Container (and thus
+  // doesn't have equal_range unless it is sorted, which we cannot check
+  // statically and is not typically true for BGL's uses of this function).
+  template <class Container,
+            class LessThanComparable>
+  std::pair<typename Container::iterator, typename Container::iterator>
+  equal_range_dispatch(Container& c,
+                       const LessThanComparable& value,
+                       container_tag)
+  {
+    // c must be sorted for std::equal_range to behave properly.
+    return std::equal_range(c.begin(), c.end(), value);
+  }
+#endif
+
+  template <class AssociativeContainer, class Value>
+  std::pair<typename AssociativeContainer::iterator,
+            typename AssociativeContainer::iterator>
+  equal_range_dispatch(AssociativeContainer& c,
+                       const Value& value,
+                       associative_container_tag)
+  {
+    return c.equal_range(value);
+  }
+
+  template <class Container, class Value>
+  std::pair<typename Container::iterator, typename Container::iterator>
+  equal_range(Container& c,
+              const Value& value)
+  {
+    return equal_range_dispatch(c, value, graph_detail::container_category(c));
+  }
+
+}} // namespace boost::graph_detail
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Stay out of the way of concept checking class templates
+# undef Container
+# undef AssociativeContainer
+#endif
+
+#else  // !defined BOOST_MPL_CFG_NO_HAS_XXX
+
+#include <utility>
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/metafunction/is_associative_container.hpp>
+#include <boost/detail/metafunction/is_unique_assoc_container.hpp>
+#include <boost/detail/metafunction/has_stable_iterators.hpp>
+#include <boost/graph/detail/metafunction/is_front_insertion_sequence.hpp>
+
+namespace boost { namespace graph_detail {
+
+    template <typename AC, typename Value>
+    inline void erase_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+    {
+        c.erase(value);
+    }
+
+    template <typename C, typename Value>
+    inline void erase_dispatch(C& c, Value const& value, ::boost::mpl::false_)
+    {
+        c.erase(::std::remove(c.begin(), c.end(), value), c.end());
+    }
+
+    template <typename C, typename Value>
+    inline void erase(C& c, Value const& value)
+    {
+        erase_dispatch(
+            c
+          , value
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+    template <typename AC, typename Pred>
+    void erase_if_dispatch_assoc(AC& c, Pred p, ::boost::mpl::true_)
+    {
+        typename AC::iterator i, next;
+
+        for (i = next = c.begin(); next != c.end(); i = next)
+        {
+            ++next;
+
+            if (p(*i))
+            {
+                c.erase(i);
+            }
+        }
+    }
+
+    template <typename AC, typename Pred>
+    void erase_if_dispatch_assoc(AC& c, Pred p, ::boost::mpl::false_)
+    {
+        // Major assumption:
+        // The erase(iterator) method of all Associative Containers without
+        // iterator stability returns the next valid iterator.
+        typename AC::iterator i = c.begin();
+
+        while (i != c.end())
+        {
+            if (p(*i))
+            {
+                i = c.erase(i);
+            }
+            else
+            {
+                ++i;
+            }
+        }
+    }
+
+    template <typename AC, typename Pred>
+    inline void erase_if_dispatch(AC& c, Pred p, ::boost::mpl::true_)
+    {
+        erase_if_dispatch_assoc(
+            c
+          , p
+          , ::boost::detail::metafunction::has_stable_iterators<AC>()
+        );
+    }
+
+    template <typename C, typename Pred>
+    inline void erase_if_dispatch(C& c, Pred p, ::boost::mpl::false_)
+    {
+        if (!c.empty())
+        {
+            c.erase(::std::remove_if(c.begin(), c.end(), p), c.end());
+        }
+    }
+
+    template <typename C, typename Pred>
+    inline void erase_if(C& c, Pred p)
+    {
+        erase_if_dispatch(
+            c
+          , p
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+    template <typename AC, typename Value>
+    inline ::std::pair<typename AC::iterator,bool>
+        push_dispatch_associative(
+            AC& c
+          , Value const& value
+          , ::boost::mpl::true_  // is_unique_associative_container
+        )
+    {
+        return c.insert(value);
+    }
+
+    template <typename AC, typename Value>
+    inline ::std::pair<typename AC::iterator,bool>
+        push_dispatch_associative(
+            AC& c
+          , Value const& value
+          , ::boost::mpl::false_  // is_multiple_associative_container
+        )
+    {
+        return std::make_pair(c.insert(value), true);
+    }
+
+    template <typename C, typename Value>
+    inline ::std::pair<typename C::iterator,bool>
+        push_dispatch_sequence(
+            C& c
+          , Value const& value
+          , ::boost::mpl::true_  // is_front_insertion_sequence
+        )
+    {
+        c.push_front(value);
+        return ::std::make_pair(c.begin(), true);
+    }
+
+    template <typename C, typename Value>
+    inline ::std::pair<typename C::iterator,bool>
+        push_dispatch_sequence(
+            C& c
+          , Value const& value
+          , ::boost::mpl::false_  // is_back_insertion_sequence
+        )
+    {
+        c.push_back(value);
+        return ::std::make_pair(::boost::prior(c.end()), true);
+    }
+
+    template <typename AC, typename Value>
+    inline ::std::pair<typename AC::iterator,bool>
+        push_dispatch(
+            AC& c
+          , Value const& value
+          , ::boost::mpl::true_  // is_associative_container
+        )
+    {
+        return push_dispatch_associative(
+            c
+          , value
+          , ::boost::detail::metafunction::is_unique_associative_container<AC>()
+        );
+    }
+
+    template <typename C, typename Value>
+    inline ::std::pair<typename C::iterator,bool>
+        push_dispatch(
+            C& c
+          , Value const& value
+          , ::boost::mpl::false_  // is_sequence
+        )
+    {
+        return push_dispatch_sequence(
+            c
+          , value
+          , ::boost::graph_detail::is_front_insertion_sequence<C>()
+        );
+    }
+
+    template <typename C, typename Value>
+    inline ::std::pair<typename C::iterator,bool>
+        push(C& c, Value const& value)
+    {
+        return push_dispatch(
+            c
+          , value
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+    template <typename AC, typename Value>
+    inline typename AC::iterator
+        find_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+    {
+        return c.find(value);
+    }
+
+    template <typename C, typename Value>
+    inline typename C::iterator
+        find_dispatch(C& c, Value const& value, ::boost::mpl::false_)
+    {
+        return ::std::find(c.begin(), c.end(), value);
+    }
+
+    template <typename C, typename Value>
+    inline typename C::iterator find(C& c, Value const& value)
+    {
+        return find_dispatch(
+            c
+          , value
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+    template <typename AC, typename Value>
+    inline typename AC::const_iterator
+        find_dispatch(AC const& c, Value const& value, ::boost::mpl::true_)
+    {
+        return c.find(value);
+    }
+
+    template <typename C, typename Value>
+    inline typename C::const_iterator
+        find_dispatch(C const& c, Value const& value, ::boost::mpl::false_)
+    {
+        return ::std::find(c.begin(), c.end(), value);
+    }
+
+    template <typename C, typename Value>
+    inline typename C::const_iterator find(C const& c, Value const& value)
+    {
+        return find_dispatch(
+            c
+          , value
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+    template <typename AC, typename Value>
+    inline ::std::pair<typename AC::iterator,typename AC::iterator>
+        equal_range_dispatch(AC& c, Value const& value, ::boost::mpl::true_)
+    {
+        return c.equal_range(value);
+    }
+
+#if 0
+    // Make the dispatch fail if c is not an Associative Container (and thus
+    // doesn't have equal_range unless it is sorted, which we cannot check
+    // statically and is not typically true for BGL's uses of this function).
+    template <typename AC, typename Value>
+    inline ::std::pair<typename AC::iterator,typename AC::iterator>
+        equal_range_dispatch(AC& c, Value const& value, ::boost::mpl::false_)
+    {
+        return ::std::equal_range(c.begin(), c.end(), value);
+    }
+#endif
+
+    template <typename C, typename Value>
+    inline ::std::pair<typename C::iterator,typename C::iterator>
+        equal_range(C& c, Value const& value)
+    {
+        return equal_range_dispatch(
+            c
+          , value
+          , ::boost::detail::metafunction::is_associative_container<C>()
+        );
+    }
+
+}} // namespace boost::graph_detail
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif  // BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+
Added: sandbox/container_gen/boost/typeof/boost/array.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/array.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,20 @@
+// 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_TYPEOF_BOOST_ARRAY_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ARRAY_HPP_INCLUDED
+
+#include <boost/array.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::array
+  , (typename)(BOOST_TYPEOF_INTEGRAL(::std::size_t))
+)
+
+#endif  // BOOST_TYPEOF_BOOST_ARRAY_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/allocator_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/allocator_traits.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_CONTAINER_ALLOCATOR_TRAITS_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_ALLOCATOR_TRAITS_HPP_INCLUDED
+
+#include <boost/container/allocator_traits.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::allocator_traits, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_ALLOCATOR_TRAITS_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/deque.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/deque.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_CONTAINER_DEQUE_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_DEQUE_INCLUDED
+
+#include <boost/container/deque.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/iterator.hpp>
+#include <boost/typeof/boost/container/allocator_traits.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::deque_base, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::deque, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::deque, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_DEQUE_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/flat_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/flat_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,25 @@
+// 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_TYPEOF_BOOST_CONTAINER_FLAT_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_FLAT_MAP_HPP_INCLUDED
+
+#include <boost/container/flat_map.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multimap, 4)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_FLAT_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/flat_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/flat_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,24 @@
+// 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_TYPEOF_BOOST_CONTAINER_FLAT_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_FLAT_SET_HPP_INCLUDED
+
+#include <boost/container/flat_set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::flat_multiset, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_FLAT_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/list.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/list.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,21 @@
+// 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_TYPEOF_BOOST_CONTAINER_LIST_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_LIST_INCLUDED
+
+#include <boost/container/list.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/iterator.hpp>
+#include <boost/typeof/boost/container/allocator_traits.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::list, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::list, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_LIST_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,25 @@
+// 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_TYPEOF_BOOST_CONTAINER_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_MAP_HPP_INCLUDED
+
+#include <boost/container/map.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multimap, 4)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,24 @@
+// 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_TYPEOF_BOOST_CONTAINER_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_SET_HPP_INCLUDED
+
+#include <boost/container/set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::multiset, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/slist.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/slist.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,20 @@
+// 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_TYPEOF_BOOST_CONTAINER_SLIST_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_SLIST_HPP_INCLUDED
+
+#include <boost/container/slist.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/container/allocator_traits.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::slist, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::slist, 2)
+
+#endif//BOOST_TYPEOF_BOOST_CONTAINER_SLIST_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/stable_vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/stable_vector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,25 @@
+// 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_TYPEOF_BOOST_CONTAINER_STABLE_VECTOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_STABLE_VECTOR_HPP_INCLUDED
+
+#include <boost/container/stable_vector.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/iterator.hpp>
+#include <boost/typeof/boost/container/allocator_traits.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::container::stable_vector_detail::iterator
+  , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::stable_vector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::stable_vector, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_STABLE_VECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/string.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/string.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,27 @@
+// 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_TYPEOF_BOOST_CONTAINER_STRING_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_STRING_HPP_INCLUDED
+
+#include <boost/container/string.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::basic_string, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::basic_string, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::basic_string, 3)
+
+#ifndef __BORLANDC__
+//Borland chokes on these "double definitions" of string and wstring
+BOOST_TYPEOF_REGISTER_TYPE(::boost::container::string)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::container::wstring)
+#endif
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_STRING_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/container/vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/container/vector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+// 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_TYPEOF_BOOST_CONTAINER_VECTOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_CONTAINER_VECTOR_HPP_INCLUDED
+
+#include <boost/container/vector.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/iterator.hpp>
+#include <boost/typeof/boost/container/allocator_traits.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::container::container_detail::vector_const_iterator
+  , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::container::container_detail::vector_iterator
+  , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::vector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::container::vector, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_CONTAINER_VECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/function.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/function.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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 BOOST_TYPEOF_BOOST_FUNCTION_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_FUNCTION_HPP_INCLUDED
+
+#include <boost/function.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function, 1)
+
+#if BOOST_FUNCTION_MAX_ARGS >= 0
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function0, 1)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 1
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function1, 2)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 2
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function2, 3)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 3
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function3, 4)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 4
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function4, 5)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 5
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function5, 6)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 6
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function6, 7)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 7
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function7, 8)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 8
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function8, 9)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 9
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function9, 10)
+#endif
+
+#if BOOST_FUNCTION_MAX_ARGS >= 10
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function10, 11)
+#endif
+
+#endif  // BOOST_TYPEOF_BOOST_FUNCTION_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/function_output_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/function_output_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_FUNCTION_OUTPUT_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_FUNCTION_OUTPUT_ITERATOR_HPP_INCLUDED
+
+#include <boost/function_output_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::function_output_iterator, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_FUNCTION_OUTPUT_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/functional/hash.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/functional/hash.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_FUNCTIONAL_HASH_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_FUNCTIONAL_HASH_HPP_INCLUDED
+
+#include <boost/functional/hash.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::hash, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_FUNCTIONAL_HASH_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/counting_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/counting_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,20 @@
+// 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_TYPEOF_BOOST_ITERATOR_COUNTING_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_COUNTING_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/counting_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/iterator/iterator_adaptor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::counting_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::counting_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::counting_iterator, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_COUNTING_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/filter_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/filter_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_FILTER_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_FILTER_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/filter_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::filter_iterator, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_FILTER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/indirect_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/indirect_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_INDIRECT_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_INDIRECT_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/iterator/iterator_adaptor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::indirect_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::indirect_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::indirect_iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::indirect_iterator, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::indirect_iterator, 5)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_INDIRECT_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/iterator_adaptor.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/iterator_adaptor.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_ITERATOR_ADAPTOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_ITERATOR_ADAPTOR_HPP_INCLUDED
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+//BOOST_TYPEOF_REGISTER_TYPE(::boost::use_default)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_adaptor, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_adaptor, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_adaptor, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_adaptor, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_adaptor, 6)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_ITERATOR_ADAPTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/iterator_facade.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/iterator_facade.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_ITERATOR_FACADE_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_ITERATOR_FACADE_HPP_INCLUDED
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_facade, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_facade, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::iterator_facade, 5)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_ITERATOR_FACADE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/permutation_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/permutation_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/permutation_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::permutation_iterator, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/reverse_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/reverse_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_REVERSE_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_REVERSE_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::reverse_iterator, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_REVERSE_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/transform_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/transform_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,20 @@
+// 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_TYPEOF_BOOST_ITERATOR_TRANSFORM_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_TRANSFORM_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/iterator/iterator_adaptor.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::transform_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::transform_iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::transform_iterator, 4)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_TRANSFORM_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/iterator/zip_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/iterator/zip_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_ITERATOR_ZIP_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_ITERATOR_ZIP_ITERATOR_HPP_INCLUDED
+
+#include <boost/iterator/zip_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::zip_iterator, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_ITERATOR_ZIP_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/mpl/bool.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/mpl/bool.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_MPL_BOOL_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_MPL_BOOL_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::mpl::bool_, (bool))
+BOOST_TYPEOF_REGISTER_TYPE(::boost::mpl::true_)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::mpl::false_)
+
+#endif  // BOOST_TYPEOF_BOOST_MPL_BOOL_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/mpl/char.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/mpl/char.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_MPL_CHAR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_MPL_CHAR_HPP_INCLUDED
+
+#include <boost/mpl/char.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::mpl::char_, (char))
+
+#endif  // BOOST_TYPEOF_BOOST_MPL_CHAR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/mpl/int.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/mpl/int.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_MPL_INT_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_MPL_INT_HPP_INCLUDED
+
+#include <boost/mpl/int.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::mpl::int_, (int))
+
+#endif  // BOOST_TYPEOF_BOOST_MPL_INT_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/mpl/long.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/mpl/long.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_MPL_LONG_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_MPL_LONG_HPP_INCLUDED
+
+#include <boost/mpl/long.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::mpl::long_, (long))
+
+#endif  // BOOST_TYPEOF_BOOST_MPL_LONG_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/mpl/size_t.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/mpl/size_t.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,18 @@
+// 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_TYPEOF_BOOST_MPL_SIZE_T_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_MPL_SIZE_T_HPP_INCLUDED
+
+#include <boost/mpl/size_t.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/size_t.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::mpl::size_t, (std_size_t))
+
+#endif  // BOOST_TYPEOF_BOOST_MPL_SIZE_T_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/optional.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/optional.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_OPTIONAL_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_OPTIONAL_HPP_INCLUDED
+
+#include <boost/optional.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::optional, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_OPTIONAL_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/clone_allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/clone_allocator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,18 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP_INCLUDED
+
+#include <boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(::boost::heap_clone_allocator)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::view_clone_allocator)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,18 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_MAP_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_MAP_ITERATOR_HPP_INCLUDED
+
+#include <boost/ptr_container/detail/map_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_container_detail::ref_pair, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map_iterator, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_MAP_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_VOID_PTR_ITERATOR_HPP_INC
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_VOID_PTR_ITERATOR_HPP_INC
+
+#include <boost/ptr_container/detail/void_ptr_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::void_ptr_iterator, 2)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_DETAIL_VOID_PTR_ITERATOR_HPP_INC
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_array.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_array.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,26 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_ARRAY_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_ARRAY_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_array.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::ptr_array
+  , (typename)(BOOST_TYPEOF_INTEGRAL(::std::size_t))
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::ptr_array
+  , (typename)(BOOST_TYPEOF_INTEGRAL(::std::size_t))(typename)
+)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_ARRAY_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_deque.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_deque.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_DEQUE_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_DEQUE_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_deque, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_DEQUE_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_list.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_LIST_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_LIST_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_list, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_LIST_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,30 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_MAP_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_map, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multimap, 5)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,28 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_SET_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_set, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_multiset, 4)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,33 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_MAP_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/ptr_map_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_map, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_map, 6)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multimap, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multimap, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multimap, 6)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_unordered_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,31 @@
+// 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_SET_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_set, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_set, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multiset, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multiset, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_unordered_multiset, 5)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_UNORDERED_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ptr_container/ptr_vector.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_PTR_CONTAINER_PTR_VECTOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_VECTOR_HPP_INCLUDED
+
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/boost/ptr_container/clone_allocator.hpp>
+#include <boost/typeof/boost/ptr_container/detail/void_ptr_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::ptr_vector, 3)
+
+#endif  // BOOST_TYPEOF_BOOST_PTR_CONTAINER_PTR_VECTOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/ref.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/ref.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_REF_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_REF_HPP_INCLUDED
+
+#include <boost/ref.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::reference_wrapper, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::is_reference_wrapper, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unwrap_reference, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_REF_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/shared_container_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/shared_container_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_BOOST_SHARED_CONTAINER_ITERATOR_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_SHARED_CONTAINER_ITERATOR_HPP_INCLUDED
+
+#include <boost/shared_container_iterator.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::shared_container_iterator, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_SHARED_CONTAINER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/unordered/unordered_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/unordered/unordered_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,28 @@
+// 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_TYPEOF_BOOST_UNORDERED_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_UNORDERED_MAP_HPP_INCLUDED
+
+#include <boost/unordered/unordered_map.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_map, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multimap, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multimap, 5)
+
+#endif  // BOOST_TYPEOF_BOOST_UNORDERED_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/unordered/unordered_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/unordered/unordered_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,27 @@
+// 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_TYPEOF_BOOST_UNORDERED_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_UNORDERED_SET_HPP_INCLUDED
+
+#include <boost/unordered/unordered_set.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_set, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multiset, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::unordered_multiset, 4)
+
+#endif  // BOOST_TYPEOF_BOOST_UNORDERED_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/boost/utility/result_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/boost/utility/result_of.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,18 @@
+// 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_TYPEOF_BOOST_UTILITY_RESULT_OF_HPP_INCLUDED
+#define BOOST_TYPEOF_BOOST_UTILITY_RESULT_OF_HPP_INCLUDED
+
+#include <boost/utility/result_of.hpp>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::result_of, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tr1_result_of, 1)
+
+#endif  // BOOST_TYPEOF_BOOST_UTILITY_RESULT_OF_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/hash_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/hash_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,48 @@
+// 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_TYPEOF_STD_HASH_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_HASH_MAP_HPP_INCLUDED
+
+#if defined BOOST_HAS_HASH
+
+#  if defined BOOST_HASH_MAP_HEADER
+#    include BOOST_HASH_MAP_HEADER
+#  else
+#    include <hash_map>
+#  endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_map, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap
+  , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap
+  , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap
+  , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multimap
+  , 4
+)
+
+#endif  // !BOOST_HAS_HASH
+
+#endif  // BOOST_TYPEOF_STD_HASH_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/hash_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/hash_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,48 @@
+// 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_TYPEOF_STD_HASH_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_HASH_SET_HPP_INCLUDED
+
+#if defined BOOST_HAS_HASH
+
+#  if defined BOOST_HASH_SET_HEADER
+#    include BOOST_HASH_SET_HEADER
+#  else
+#    include <hash_set>
+#  endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/functional/hash.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::hash_set, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset
+  , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset
+  , 2
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset
+  , 3
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::BOOST_STD_EXTENSION_NAMESPACE::hash_multiset
+  , 4
+)
+
+#endif  // !BOOST_HAS_HASH
+
+#endif  // BOOST_TYPEOF_STD_HASH_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/slist.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/slist.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,30 @@
+// 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_TYPEOF_STD_SLIST_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_SLIST_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SLIST
+
+#  if defined BOOST_SLIST_HEADER
+#    include BOOST_SLIST_HEADER
+#  else
+#    include <slist>
+#  endif
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::slist, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::BOOST_STD_EXTENSION_NAMESPACE::slist, 2)
+
+#endif  // !BOOST_NO_SLIST
+
+#endif  // BOOST_TYPEOF_STD_SLIST_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/tr1/array.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/tr1/array.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_TYPEOF_STD_TR1_ARRAY_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_TR1_ARRAY_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/array.hpp>
+
+#if defined BOOST_HAS_TR1_ARRAY
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::std::tr1::array
+  , (typename)(BOOST_TYPEOF_INTEGRAL(::std::size_t))
+)
+#else
+#include <boost/typeof/boost/array.hpp>
+#endif
+
+#endif  // BOOST_TYPEOF_STD_TR1_ARRAY_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/tr1/functional.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/tr1/functional.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,49 @@
+// 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_TYPEOF_STD_TR1_FUNCTIONAL_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_TR1_FUNCTIONAL_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/functional.hpp>
+
+#if defined BOOST_HAS_TR1_REFERENCE_WRAPPER \
+ || defined BOOST_HAS_TR1_RESULT_OF \
+ || !defined BOOST_HAS_TR1_RESULT_OF \
+ && !defined BOOST_NO_SFINAE \
+ && !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || defined BOOST_HAS_TR1_FUNCTION \
+ || defined BOOST_HAS_TR1_HASH
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+#endif
+
+#if defined BOOST_HAS_TR1_REFERENCE_WRAPPER
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::reference_wrapper, 1)
+#else
+#include <boost/typeof/boost/ref.hpp>
+#endif
+
+#if defined BOOST_HAS_TR1_RESULT_OF
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::result_of, 1)
+#elif !defined BOOST_NO_SFINAE \
+ && !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/boost/utility/result_of.hpp>
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::result_of, 1)
+#endif
+
+#if defined BOOST_HAS_TR1_FUNCTION
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::function, 1)
+#else
+#include <boost/typeof/boost/function.hpp>
+#endif
+
+#if defined BOOST_HAS_TR1_HASH
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::hash, 1)
+#else
+#include <boost/typeof/boost/functional/hash.hpp>
+#endif
+
+#endif  // BOOST_TYPEOF_STD_TR1_FUNCTIONAL_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/tr1/unordered_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/tr1/unordered_map.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,27 @@
+// 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_TYPEOF_STD_TR1_UNORDERED_MAP_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_TR1_UNORDERED_MAP_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/unordered_map.hpp>
+
+#if defined BOOST_HAS_TR1_UNORDERED_MAP
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_map, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multimap, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multimap, 5)
+#else
+#include <boost/typeof/boost/unordered/unordered_map.hpp>
+#endif
+
+#endif  // BOOST_TYPEOF_STD_TR1_UNORDERED_MAP_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/typeof/std/tr1/unordered_set.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/typeof/std/tr1/unordered_set.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,27 @@
+// 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_TYPEOF_STD_TR1_UNORDERED_SET_HPP_INCLUDED
+#define BOOST_TYPEOF_STD_TR1_UNORDERED_SET_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/unordered_set.hpp>
+
+#if defined BOOST_HAS_TR1_UNORDERED_SET
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_set, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multiset, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::std::tr1::unordered_multiset, 4)
+#else
+#include <boost/typeof/boost/unordered/unordered_set.hpp>
+#endif
+
+#endif  // BOOST_TYPEOF_STD_TR1_UNORDERED_SET_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/utility/get_iterator_second.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/utility/get_iterator_second.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,116 @@
+// 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_UTILITY_GET_ITERATOR_SECOND_HPP_INCLUDED
+#define BOOST_UTILITY_GET_ITERATOR_SECOND_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/ref.hpp>
+#include <boost/ptr_container/detail/map_iterator.hpp>
+
+//[reference__get_iterator_second_result
+namespace boost {
+
+    template <typename Iterator>
+    struct get_iterator_second_result
+    {
+        typedef typename ::std::tr1::remove_pointer<
+                    typename ::boost::unwrap_reference<
+                        BOOST_TYPEOF_TPL(::boost::ref(Iterator()->second))
+                    >::type
+                >::type&
+                type;
+    };
+}  // namespace boost
+//]
+
+namespace boost { namespace detail {
+
+    template <typename Iterator>
+    class get_iterator_second_helper
+    {
+     public:
+        typedef Iterator
+                argument_type;
+        typedef typename get_iterator_second_result<Iterator>::type
+                result_type;
+
+        result_type operator()(argument_type itr) const;
+
+     private:
+        static result_type _evaluate(Iterator itr, ::boost::mpl::true_);
+
+        static result_type _evaluate(Iterator itr, ::boost::mpl::false_);
+    };
+
+    template <typename Iterator>
+    inline typename get_iterator_second_helper<Iterator>::result_type
+        get_iterator_second_helper<Iterator>::operator()(
+            argument_type itr
+        ) const
+    {
+        typedef typename ::boost::iterator_value<Iterator>::type _value_type;
+
+        return _evaluate(
+            itr
+          , typename ::boost::mpl::if_<
+                ::std::tr1::is_same<
+                    ::boost::ptr_container_detail::ref_pair<
+                        typename _value_type::first_type
+                      , typename _value_type::second_type
+                    >
+                  , _value_type
+                >
+              , ::boost::mpl::true_
+              , ::boost::mpl::false_
+            >::type()
+        );
+    }
+
+    template <typename Iterator>
+    inline typename get_iterator_second_helper<Iterator>::result_type
+        get_iterator_second_helper<Iterator>::_evaluate(
+            Iterator itr
+          , ::boost::mpl::true_
+        )
+    {
+        return *itr->second;
+    }
+
+    template <typename Iterator>
+    inline typename get_iterator_second_helper<Iterator>::result_type
+        get_iterator_second_helper<Iterator>::_evaluate(
+            Iterator itr
+          , ::boost::mpl::false_
+        )
+    {
+        return itr->second;
+    }
+}}  // namespace boost::detail
+
+//[reference__get_iterator_second
+namespace boost {
+
+    template <typename Iterator>
+    typename get_iterator_second_result<Iterator>::type
+        get_iterator_second(Iterator itr);
+
+    //<-
+    template <typename Iterator>
+    inline typename get_iterator_second_result<Iterator>::type
+        get_iterator_second(Iterator itr)
+    {
+        return detail::get_iterator_second_helper<Iterator>()(itr);
+    }
+    //->
+}  // namespace boost
+//]
+
+#endif  // BOOST_UTILITY_GET_ITERATOR_SECOND_HPP_INCLUDED
+
Added: sandbox/container_gen/boost/utility/get_iterator_value_second.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/utility/get_iterator_value_second.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,125 @@
+// 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_UTILITY_GET_ITERATOR_VALUE_SECOND_HPP_INCLUDED
+#define BOOST_UTILITY_GET_ITERATOR_VALUE_SECOND_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/ref.hpp>
+#include <boost/ptr_container/detail/map_iterator.hpp>
+#include <boost/detail/function/get_reference.hpp>
+
+//[reference__get_iterator_value_second_result
+namespace boost {
+
+    template <typename IterValue>
+    struct get_iterator_value_second_result
+    {
+        typedef // implementation_defined
+                //<-
+                typename ::std::tr1::remove_pointer<
+                    typename ::boost::unwrap_reference<
+                        BOOST_TYPEOF_TPL(
+                            ::boost::ref(
+                                ::boost::detail::get_reference<
+                                    IterValue
+                                >().second
+                            )
+                        )
+                    >::type
+                >::type&
+                //->
+                type;
+    };
+}  // namespace boost
+//]
+
+namespace boost { namespace detail {
+
+    template <typename IterValue>
+    class get_iterator_value_second_helper
+    {
+     public:
+        typedef IterValue&
+                argument_type;
+        typedef typename get_iterator_value_second_result<IterValue>::type
+                result_type;
+
+        result_type operator()(argument_type itr) const;
+
+     private:
+        static result_type _evaluate(argument_type arg, ::boost::mpl::true_);
+
+        static result_type _evaluate(argument_type arg, ::boost::mpl::false_);
+    };
+
+    template <typename IterValue>
+    inline typename get_iterator_value_second_helper<IterValue>::result_type
+        get_iterator_value_second_helper<IterValue>::operator()(
+            argument_type arg
+        ) const
+    {
+        typedef typename ::std::tr1::remove_const<IterValue>::type _value_type;
+
+        return _evaluate(
+            arg
+          , typename ::boost::mpl::if_<
+                ::std::tr1::is_same<
+                    ::boost::ptr_container_detail::ref_pair<
+                        typename _value_type::first_type
+                      , typename _value_type::second_type
+                    >
+                  , _value_type
+                >
+              , ::boost::mpl::true_
+              , ::boost::mpl::false_
+            >::type()
+        );
+    }
+
+    template <typename IterValue>
+    inline typename get_iterator_value_second_helper<IterValue>::result_type
+        get_iterator_value_second_helper<IterValue>::_evaluate(
+            argument_type arg
+          , ::boost::mpl::true_
+        )
+    {
+        return *arg.second;
+    }
+
+    template <typename IterValue>
+    inline typename get_iterator_value_second_helper<IterValue>::result_type
+        get_iterator_value_second_helper<IterValue>::_evaluate(
+            argument_type arg
+          , ::boost::mpl::false_
+        )
+    {
+        return arg.second;
+    }
+}}  // namespace boost::detail
+
+//[reference__get_iterator_value_second
+namespace boost {
+
+    template <typename IterValue>
+    typename get_iterator_value_second_result<IterValue>::type
+        get_iterator_value_second(IterValue& value);
+
+    //<-
+    template <typename IterValue>
+    inline typename get_iterator_value_second_result<IterValue>::type
+        get_iterator_value_second(IterValue& value)
+    {
+        return detail::get_iterator_value_second_helper<IterValue>()(value);
+    }
+    //->
+}  // namespace boost
+//]
+
+#endif  // BOOST_UTILITY_GET_ITERATOR_VALUE_SECOND_HPP_INCLUDED
+
Added: sandbox/container_gen/libs/container_gen/doc/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/Jamroot	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+project html ;
+import boostbook : boostbook ;
+using quickbook ;
+
+xml container_gen
+    :
+        container_gen.qbk
+    ;
+boostbook standalone
+    :
+        container_gen
+    :
+        <xsl:param>admon.graphics.path=http://www.boost.org/doc/libs/release/doc/src/images/
+        <xsl:param>navig.graphics.path=http://www.boost.org/doc/libs/release/doc/src/images/
+        <xsl:param>boost.root=http://www.boost.org
+        <xsl:param>boost.libraries=http://www.boost.org/libs/libraries.htm
+        <xsl:param>boost.image.src=../../../../boost.png
+        <xsl:param>boost.image.alt="C++ Boost"
+        <xsl:param>boost.image.w=277
+        <xsl:param>boost.image.h=86
+        <xsl:param>html.stylesheet=http://www.boost.org/doc/libs/release/doc/src/boostbook.css
+        <xsl:param>nav.layout=none
+        <xsl:param>chunk.section.depth=2
+        <xsl:param>chunk.first.sections=1
+        <xsl:param>generate.section.toc.level=0
+        <xsl:param>toc.section.depth=0
+        <xsl:param>toc.max.depth=0
+    ;
+
Added: sandbox/container_gen/libs/container_gen/doc/changelog.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/changelog.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,40 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Changelog]
+
+[heading From 0.2 to 0.3]
+
+  * Moved from __Boost_Utility__ to top level.
+  * Removed `ptr_container_gen` metafunction and `associative_container_gen`
+    and `ptr_associative_container_gen` metafunction classes.
+  * Added selector templates.  See __Selectors__.
+  * Added __emplace_function_gen__ and __emplace_associative_function_gen__
+    type-generating metafunctions.
+  * Added __is_flat_associative_selector__, __is_ptr_selector__,
+    __is_recursive_selector__, __is_tr1_selector__, and
+    __has_emplace_member_function_selector__ introspection metafunctions.
+  * Renamed `is_unordered_selector` to __is_hashed_associative_selector__.
+  * Removed `boost_vecS`, `boost_dequeS`, `boost_listS`, `boost_slistS`,
+    `boost_setS`, `boost_mapS`, `boost_multisetS`, and `boost_multimapS`
+    selector type definitions.
+  * Modified __graph_adjacency_list__ so that it also recognizes new selector
+    types (except when __is_ptr_selector__ returns __mpl_true__).
+
+[heading From 0.1 to 0.2]
+
+  * Added `boost_vecS`, `stable_vecS`, `boost_dequeS`, `boost_listS`,
+    `boost_slistS`, `boost_setS`, `boost_mapS`, `boost_multisetS`,
+    `boost_multimapS`, `flat_setS`, `flat_mapS`, `flat_multisetS`, and
+    `flat_multimapS` selector types.
+  * Added __is_associative_selector__, __is_multiple_associative_selector__,
+    `is_unordered_selector`, and __has_stable_iterators_selector__
+    introspection metafunctions.
+
+[endsect] [/ Changelog]
+
Added: sandbox/container_gen/libs/container_gen/doc/container_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/container_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,156 @@
+[library container_gen
+    [quickbook 1.5]
+    [version 0.3]
+    [authors [Lumsdaine, Andrew][Lee, Lie-Quan][Claveirole, Thomas][Siek, Jeremy G.][Enage, Cromwell D.]]
+    [copyright 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage]
+    [purpose Collection of container-generating and selector-introspecting metafunctions]
+    [license
+        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])
+    ]
+]
+
+[/ General links.]
+[def __recursive_data_types__ [@http://en.wikipedia.org/wiki/Recursive_data_type recursive data types]]
+
+[/ General concept links.]
+[def __Default_Constructible__ [@http://www.sgi.com/tech/stl/DefaultConstructible.html [*Default Constructible]]]
+[def __STL_Container__ [@http://www.sgi.com/tech/stl/Container.html [*STL Container]]]
+[def __Random_Access_Iterator__ [@http://www.sgi.com/tech/stl/RandomAccessIterator.html [*Random Access Iterator]]]
+[def __Random_Access_Container__ [@http://www.sgi.com/tech/stl/RandomAccessContainer.html [*Random Access Container]]]
+[def __Associative_Container__ [@http://www.sgi.com/tech/stl/AssociativeContainer.html [*Associative Container]]]
+[def __Sorted_Associative_Container__ [@http://www.sgi.com/tech/stl/SortedAssociativeContainer.html [*Sorted Associative Container]]]
+[def __Hashed_Associative_Container__ [@http://www.sgi.com/tech/stl/HashAssociativeContainer.html [*Hashed Associative Container]]]
+[def __Unique_Associative_Container__ [@http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html [*Unique Associative Container]]]
+[def __Multiple_Associative_Container__ [@http://www.sgi.com/tech/stl/MultipleAssociativeContainer.html [*Multiple Associative Container]]]
+[def __Binary_Predicate__ [@http://www.sgi.com/tech/stl/BinaryPredicate.html [*Binary Predicate]]]
+[def __Strict_Weak_Ordering__ [@http://www.sgi.com/tech/stl/StrictWeakOrdering.html [*Strict Weak Ordering]]]
+[def __Hash_Function__ [@http://www.sgi.com/tech/stl/HashFunction.html [*Hash Function]]]
+
+[/ STL reference links.]
+[def __std_list__ [@http://www.sgi.com/tech/stl/List.html `std::list`]]
+[def __std_pair__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
+[def _std_string_ [@http://www.sgi.com/tech/stl/basic_string.html std::string]]
+
+[/ Boost library links.]
+[def __Boost_Utility__ [@boost:libs/utility/index.html [*Boost.Utility]]]
+[def __Boost_Assign__ [@boost:libs/assign/doc/index.html [*Boost.Assign]]]
+[def __Boost_Container__ [@boost:doc/html/container.html [*Boost.Container]]]
+[def __Boost_Unordered__ [@boost:doc/html/unordered.html [*Boost.Unordered]]]
+[def __Boost_TR1__ [@boost:doc/html/boost_tr1.html [*Boost.TR1]]]
+[def __Boost_Pointer_Container__ [@boost:libs/ptr_container/doc/index.html [*Boost.PointerContainer]]]
+[def __BGL__ [@boost:libs/graph/doc/index.html BGL]]
+
+[/ Boost concept links.]
+[def __Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*Integral Constant]]]
+[def __Boolean_Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*Boolean Integral Constant]]]
+[def __Unary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Unary Metafunction Class]]]
+[def __Binary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Binary Metafunction Class]]]
+[def __Clone_Allocator__ [@boost:libs/ptr_container/doc/reference.html#the-clone-allocator-concept [*Clone Allocator]]]
+[def __Recursive_Container__ [@boost:doc/html/container/containers_of_incomplete_types.html [*Recursive Container]]]
+[def __Flat_Associative_Container__ [@boost:doc/html/container/non_standard_containers.html#container.non_standard_containers.flat_xxx [*Flat Associative Container]]]
+
+[/ Boost reference links.]
+[def _ASSERT_ [@boost:libs/utility/assert.html BOOST_ASSERT]]
+[def _AUTO_TPL_ [@boost:doc/html/typeof/refe.html#typeof.auto BOOST_AUTO_TPL]]
+[def __TYPEOF_EMULATION__ [@boost:doc/html/typeof/refe.html#typeof.compl `BOOST_TYPEOF_EMULATION`]]
+[def __MPL_CFG_NO_HAS_XXX__ [@boost:libs/mpl/doc/refmanual/cfg-no-has-xxx.html `BOOST_MPL_CFG_NO_HAS_XXX`]]
+[def __mpl_true__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::true_`]]
+[def _mpl_true_ [@boost:libs/mpl/doc/refmanual/bool.html boost::mpl::true_]]
+[def __mpl_false__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::false_`]]
+[def _range_equal_ [@boost:libs/range/doc/html/range/reference/algorithms/non_mutating/equal.html boost::range::equal]]
+[def __array__ [@boost:doc/html/array.html `boost::array`]]
+[def __container_stable_vector__ [@boost:doc/html/boost/container/stable_vector.html `boost::container::stable_vector`]]
+[def __graph_adjacency_list__ [@boost:libs/graph/doc/adjacency_list.html `boost::adjacency_list`]]
+[def __graph_parallel_edge_traits__ [@boost:libs/graph/doc/using_adjacency_list.html#SECTION00834200000000000000 `boost::parallel_edge_traits`]]
+[def __tr1_array__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.array `std::tr1::array`]]
+[def __tr1_unordered_set__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set `std::tr1::unordered_set`]]
+[def __tr1_unordered_multiset__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set `std::tr1::unordered_multiset`]]
+[def __tr1_unordered_map__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_map `std::tr1::unordered_map`]]
+[def __tr1_unordered_multimap__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_map `std::tr1::unordered_multimap`]]
+
+[/ Boost.ContainerGen reference header file links.]
+[def __boost_container_gen_selectors_hpp__ [@../../../../boost/container_gen/selectors.hpp boost/container_gen/selectors.hpp]]
+[def __boost_container_gen_container_gen_hpp__ [@../../../../boost/container_gen/container_gen.hpp boost/container_gen/container_gen.hpp]]
+[def __boost_container_gen_emplace_function_gen_hpp__ [@../../../../boost/container_gen/emplace_function_gen.hpp boost/container_gen/emplace_function_gen.hpp]]
+[def __boost_container_gen_emplace_assoc_function_gen_hpp__ [@../../../../boost/container_gen/emplace_assoc_function_gen.hpp boost/container_gen/emplace_assoc_function_gen.hpp]]
+[def __boost_container_gen_is_random_access_selector_hpp__ [@../../../../boost/container_gen/is_random_access_selector.hpp boost/container_gen/is_random_access_selector.hpp]]
+[def __boost_container_gen_is_associative_selector_hpp__ [@../../../../boost/container_gen/is_associative_selector.hpp boost/container_gen/is_associative_selector.hpp]]
+[def __boost_container_gen_is_unique_assoc_selector_hpp__ [@../../../../boost/container_gen/is_unique_assoc_selector.hpp boost/container_gen/is_unique_assoc_selector.hpp]]
+[def __boost_container_gen_is_multiple_assoc_selector_hpp__ [@../../../../boost/container_gen/is_multiple_assoc_selector.hpp boost/container_gen/is_multiple_assoc_selector.hpp]]
+[def __boost_container_gen_is_flat_assoc_selector_hpp__ [@../../../../boost/container_gen/is_flat_assoc_selector.hpp boost/container_gen/is_flat_assoc_selector.hpp]]
+[def __boost_container_gen_is_hashed_assoc_selector_hpp__ [@../../../../boost/container_gen/is_hashed_assoc_selector.hpp boost/container_gen/is_hashed_assoc_selector.hpp]]
+[def __boost_container_gen_is_ptr_selector_hpp__ [@../../../../boost/container_gen/is_ptr_selector.hpp boost/container_gen/is_ptr_selector.hpp]]
+[def __boost_container_gen_is_recursive_selector_hpp__ [@../../../../boost/container_gen/is_recursive_selector.hpp boost/container_gen/is_recursive_selector.hpp]]
+[def __boost_container_gen_is_tr1_selector_hpp__ [@../../../../boost/container_gen/is_tr1_selector.hpp boost/container_gen/is_tr1_selector.hpp]]
+[def __boost_container_gen_has_emplace_mfunc_selector_hpp__ [@../../../../boost/container_gen/has_emplace_mfunc_selector.hpp boost/container_gen/has_emplace_mfunc_selector.hpp]]
+[def __boost_container_gen_has_stable_iters_selector_hpp__ [@../../../../boost/container_gen/has_stable_iters_selector.hpp boost/container_gen/has_stable_iters_selector.hpp]]
+
+[/ Boost.ContainerGen reference links.]
+[def __Selectors__ [link container_gen.reference.selectors *Selectors*]]
+[def _vector_selector_ [link container_gen.reference.selectors boost::vector_selector]]
+[def _map_selector_ [link container_gen.reference.selectors boost::map_selector]]
+[def __container_gen__ [link container_gen.reference.container_gen `container_gen`]]
+[def _container_gen_ [link container_gen.reference.container_gen container_gen]]
+[def __emplace_function_gen__ [link container_gen.reference.emplace_function_gen `emplace_function_gen`]]
+[def _emplace_function_gen_ [link container_gen.reference.emplace_function_gen emplace_function_gen]]
+[def __emplace_associative_function_gen__ [link container_gen.reference.emplace_assoc_function_gen `emplace_associative_function_gen`]]
+[def _emplace_associative_function_gen_ [link container_gen.reference.emplace_assoc_function_gen emplace_associative_function_gen]]
+[def __is_random_access_selector__ [link container_gen.reference.is_random_access_selector `is_random_access_selector`]]
+[def _is_random_access_selector_ [link container_gen.reference.is_random_access_selector is_random_access_selector]]
+[def __is_associative_selector__ [link container_gen.reference.is_associative_selector `is_associative_selector`]]
+[def _is_associative_selector_ [link container_gen.reference.is_associative_selector is_associative_selector]]
+[def __is_unique_associative_selector__ [link container_gen.reference.is_unique_assoc_selector `is_unique_associative_selector`]]
+[def _is_unique_associative_selector_ [link container_gen.reference.is_unique_assoc_selector is_unique_associative_selector]]
+[def __is_multiple_associative_selector__ [link container_gen.reference.is_multiple_assoc_selector `is_multiple_associative_selector`]]
+[def _is_multiple_associative_selector_ [link container_gen.reference.is_multiple_assoc_selector is_multiple_associative_selector]]
+[def __is_flat_associative_selector__ [link container_gen.reference.is_flat_assoc_selector `is_flat_associative_selector`]]
+[def _is_flat_associative_selector_ [link container_gen.reference.is_flat_assoc_selector is_flat_associative_selector]]
+[def __is_hashed_associative_selector__ [link container_gen.reference.is_hashed_assoc_selector `is_hashed_associative_selector`]]
+[def _is_hashed_associative_selector_ [link container_gen.reference.is_hashed_assoc_selector is_hashed_associative_selector]]
+[def __is_ptr_selector__ [link container_gen.reference.is_ptr_selector `is_ptr_selector`]]
+[def _is_ptr_selector_ [link container_gen.reference.is_ptr_selector is_ptr_selector]]
+[def __is_recursive_selector__ [link container_gen.reference.is_recursive_selector `is_recursive_selector`]]
+[def _is_recursive_selector_ [link container_gen.reference.is_recursive_selector is_recursive_selector]]
+[def __is_tr1_selector__ [link container_gen.reference.is_tr1_selector `is_tr1_selector`]]
+[def _is_tr1_selector_ [link container_gen.reference.is_tr1_selector is_tr1_selector]]
+[def __has_stable_iterators_selector__ [link container_gen.reference.has_stable_iters_selector `has_stable_iterators_selector`]]
+[def _has_stable_iterators_selector_ [link container_gen.reference.has_stable_iters_selector has_stable_iterators_selector]]
+[def __has_emplace_member_function_selector__ [link container_gen.reference.has_emplace_mfunc_selector `has_emplace_member_function_selector`]]
+[def _has_emplace_member_function_selector_ [link container_gen.reference.has_emplace_mfunc_selector has_emplace_member_function_selector]]
+
+[/ Autogenerate reference documentation directly from code.]
+[/ Bypass Doxygen.]
+[import ../../../boost/container_gen/selectors.hpp]
+[import ../../../boost/container_gen/container_gen.hpp]
+[import ../../../boost/container_gen/emplace_function_gen.hpp]
+[import ../../../boost/container_gen/emplace_assoc_function_gen.hpp]
+[import ../../../boost/container_gen/is_random_access_selector.hpp]
+[import ../../../boost/container_gen/is_associative_selector.hpp]
+[import ../../../boost/container_gen/is_unique_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_multiple_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_flat_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_hashed_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_ptr_selector.hpp]
+[import ../../../boost/container_gen/is_recursive_selector.hpp]
+[import ../../../boost/container_gen/is_tr1_selector.hpp]
+[import ../../../boost/container_gen/has_stable_iters_selector.hpp]
+[import ../../../boost/container_gen/has_emplace_mfunc_selector.hpp]
+[import ../../../libs/graph/example/container_gen.cpp]
+[import ../../../libs/container_gen/example/output_shape_stats.cpp]
+[import ../../../libs/container_gen/example/output_char_tallies.cpp]
+
+[/ index.html Start]
+
+[heading Rationale]
+Significant interest was expressed in moving the `container_gen` metafunction
+from its current place in the __BGL__ to a more general or first-class
+residence.  The relevant discussion is archived here:
+[@http://listarchives.boost.org/Archives/boost/2011/05/181573.php].
+
+[/ index.html End]
+
+[include reference.qbk]
+[include changelog.qbk]
+
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,70 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Changelog</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="prev" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="container_gen.changelog"></a><a class="link" href="changelog.html" title="Changelog">Changelog</a>
+</h2></div></div></div>
+<h4>
+<a name="container_gen.changelog.h0"></a>
+      <span class="phrase"><a name="container_gen.changelog.from_0_2_to_0_3"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_2_to_0_3">From
+      0.2 to 0.3</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Moved</span> <span class="identifier">from</span> Boost.Utility <span class="identifier">to</span> <span class="identifier">top</span> <span class="identifier">level</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">ptr_container_gen</span><span class="error">`</span> <span class="identifier">metafunction</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">associative_container_gen</span><span class="error">`</span>
+  <span class="keyword">and</span> <span class="error">`</span><span class="identifier">ptr_associative_container_gen</span><span class="error">`</span> <span class="identifier">metafunction</span> <span class="identifier">classes</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="identifier">selector</span> <span class="identifier">templates</span><span class="special">.</span>  <span class="identifier">See</span> <a class="link" href="reference/selectors.html" title="Selectors"><span class="bold"><strong>Selectors</strong></span></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a> <span class="keyword">and</span> <a class="link" href="reference/emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+  <span class="identifier">type</span><span class="special">-</span><span class="identifier">generating</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a><span class="special">,</span> <span class="keyword">and</span>
+  <a class="link" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a> <span class="identifier">introspection</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">is_unordered_selector</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">boost_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_dequeS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_listS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_slistS</span><span class="error">`</span><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">boost_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_multisetS</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">boost_multimapS</span><span class="error">`</span>
+  <span class="identifier">selector</span> <span class="identifier">type</span> <span class="identifier">definitions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Modified</span> boost::adjacency_list <span class="identifier">so</span> <span class="identifier">that</span> <span class="identifier">it</span> <span class="identifier">also</span> <span class="identifier">recognizes</span> <span class="keyword">new</span> <span class="identifier">selector</span>
+  <span class="identifier">types</span> <span class="special">(</span><span class="identifier">except</span> <span class="identifier">when</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a> <span class="identifier">returns</span> boost::mpl::true_<span class="special">).</span>
+</pre>
+<h4>
+<a name="container_gen.changelog.h1"></a>
+      <span class="phrase"><a name="container_gen.changelog.from_0_1_to_0_2"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_1_to_0_2">From
+      0.1 to 0.2</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">boost_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">stable_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_dequeS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_listS</span><span class="error">`</span><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">boost_slistS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_multisetS</span><span class="error">`</span><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">boost_multimapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_multisetS</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span>
+  <span class="error">`</span><span class="identifier">flat_multimapS</span><span class="error">`</span> <span class="identifier">selector</span> <span class="identifier">types</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">is_unordered_selector</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span> <a class="link" href="reference/has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+  <span class="identifier">introspection</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,65 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="prev" href="../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="next" href="reference/selectors.html" title="Selectors">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="container_gen.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/selectors.html" title="Selectors"><span class="bold"><strong>Selectors</strong></span></a>
+</pre>
+<h4>
+<a name="container_gen.reference.h0"></a>
+      <span class="phrase"><a name="container_gen.reference.type_generation_metafunctions"></a></span><a class="link" href="reference.html#container_gen.reference.type_generation_metafunctions">Type
+      Generation Metafunctions</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+</pre>
+<h4>
+<a name="container_gen.reference.h1"></a>
+      <span class="phrase"><a name="container_gen.reference.selector_introspection_metafunctions"></a></span><a class="link" href="reference.html#container_gen.reference.selector_introspection_metafunctions">Selector
+      Introspection Metafunctions</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/is_random_access_selector.html" title="is_random_access_selector"><code class="computeroutput"><span class="identifier">is_random_access_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,364 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>container_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="selectors.html" title="Selectors">
+<link rel="next" href="emplace_function_gen.html" title="emplace_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.container_gen"></a><a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.synopsis"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">container_gen</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef .... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.description"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The boost::adjacency_list class template
+          uses this metafunction to map the <code class="computeroutput"><span class="identifier">OutEdgeList</span></code>
+          and <code class="computeroutput"><span class="identifier">VertexList</span></code> selectors
+          to the actual container types used for the graph storage. You can also
+          use this metafunction to determine the appropriate associative container
+          type given the specified selector. The example routine below uses the
+          <code class="computeroutput"><span class="identifier">container_gen</span></code> return type
+          to associate each distinct string character with the number of times it
+          appears in the string.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">Selector</span><span class="special">)</span>
+<span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">,</span><span class="keyword">char</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">type</span>
+            <span class="identifier">FrequencyTable</span><span class="special">;</span>
+
+    <span class="identifier">FrequencyTable</span> <span class="identifier">freq_table</span><span class="special">;</span>
+    <span class="keyword">char</span> <span class="identifier">reverse_counter</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+
+    <span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">str</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+    <span class="special">{</span>
+        <span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">ft_itr</span> <span class="special">=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">str</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span>
+
+        <span class="keyword">if</span> <span class="special">(</span><span class="identifier">ft_itr</span> <span class="special">==</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span>
+        <span class="special">{</span>
+            <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="identifier">str</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="number">1</span><span class="special">));</span>
+        <span class="special">}</span>
+        <span class="keyword">else</span>
+        <span class="special">{</span>
+            <span class="special">++</span><span class="identifier">ft_itr</span><span class="special">-></span><span class="identifier">second</span><span class="special">;</span>
+        <span class="special">}</span>
+    <span class="special">}</span>
+
+    <span class="keyword">for</span> <span class="special">(</span>
+        <span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">ft_itr</span> <span class="special">=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
+        <span class="identifier">ft_itr</span> <span class="special">!=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+        <span class="special">++</span><span class="identifier">ft_itr</span>
+    <span class="special">)</span>
+    <span class="special">{</span>
+        <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">ft_itr</span><span class="special">-></span><span class="identifier">first</span> <span class="special"><<</span> <span class="string">": "</span> <span class="special"><<</span> <span class="identifier">ft_itr</span><span class="special">-></span><span class="identifier">second</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+    <span class="special">}</span>
+
+    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+<p>
+          This library provides specializations of this metafunction class for each
+          selector it provides whose resulting storage type models the STL Container concept. Here, two such selectors
+          are passed in calls to the example routine.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span>
+<span class="special">{</span>
+    <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="string">"abacadabra"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">hash_mapS</span><span class="special">());</span>
+    <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="string">"loolapalooza"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multimapS</span><span class="special">());</span>
+    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+<p>
+          The <code class="computeroutput"><span class="identifier">container_gen</span></code> specialization
+          for the <code class="computeroutput"><span class="identifier">multimap_selector</span></code>
+          template is shown here.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Key</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Mapped</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">container_gen</span><span class="special"><</span>
+        <span class="identifier">multimap_selector</span><span class="special"><</span><span class="identifier">IsBoost</span><span class="special">,</span><span class="identifier">CompareSelector</span><span class="special">,</span><span class="identifier">AllocatorSelector</span><span class="special">></span>
+      <span class="special">,</span> <span class="identifier">Key</span>
+      <span class="special">,</span> <span class="identifier">Mapped</span>
+    <span class="special">></span>
+    <span class="special">{</span>
+     <span class="keyword">private</span><span class="special">:</span>
+        <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap1</span><span class="special"><</span>
+                    <span class="identifier">CompareSelector</span>
+                  <span class="special">,</span> <span class="identifier">Key</span>
+                <span class="special">>::</span><span class="identifier">type</span>
+                <span class="identifier">_comparator</span><span class="special">;</span>
+        <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special"><</span>
+                    <span class="identifier">AllocatorSelector</span>
+                  <span class="special">,</span> <span class="identifier">Key</span>
+                  <span class="special">,</span> <span class="identifier">Mapped</span>
+                <span class="special">>::</span><span class="identifier">type</span>
+                <span class="identifier">_allocator</span><span class="special">;</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special"><</span>
+                    <span class="identifier">IsBoost</span>
+                  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                        <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">Mapped</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">container</span><span class="special">::</span><span class="identifier">multiset</span><span class="special"><</span>
+                            <span class="identifier">Key</span>
+                          <span class="special">,</span> <span class="identifier">_comparator</span>
+                          <span class="special">,</span> <span class="identifier">_allocator</span>
+                        <span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">container</span><span class="special">::</span><span class="identifier">multimap</span><span class="special"><</span>
+                            <span class="identifier">Key</span>
+                          <span class="special">,</span> <span class="identifier">Mapped</span>
+                          <span class="special">,</span> <span class="identifier">_comparator</span>
+                          <span class="special">,</span> <span class="identifier">_allocator</span>
+                        <span class="special">></span>
+                    <span class="special">></span>
+                  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                        <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">Mapped</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multiset</span><span class="special"><</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">_comparator</span><span class="special">,</span><span class="identifier">_allocator</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multimap</span><span class="special"><</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Mapped</span><span class="special">,</span><span class="identifier">_comparator</span><span class="special">,</span><span class="identifier">_allocator</span><span class="special">></span>
+                    <span class="special">></span>
+                <span class="special">>::</span><span class="identifier">type</span>
+                <span class="identifier">type</span><span class="special">;</span>
+    <span class="special">};</span>
+
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+<p>
+          You can use <code class="computeroutput"><span class="identifier">container_gen</span></code>
+          to easily select an appropriate Boost.PointerContainer type. Pointer containers
+          are ideal for storing heterogeneous items with a common base type, e.g.
+          shapes:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+    <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">my_shape</span><span class="special">()</span>
+    <span class="special">{</span>
+    <span class="special">}</span>
+
+    <span class="keyword">virtual</span> <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+
+    <span class="keyword">virtual</span> <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">your_square</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+    <span class="keyword">double</span> <span class="identifier">length</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+    <span class="keyword">explicit</span> <span class="identifier">your_square</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">s</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span>
+    <span class="special">{</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">return</span> <span class="identifier">length</span> <span class="special">*</span> <span class="number">4.0</span><span class="special">;</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">return</span> <span class="identifier">length</span> <span class="special">*</span> <span class="identifier">length</span><span class="special">;</span>
+    <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">your_circle</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+    <span class="keyword">double</span> <span class="identifier">radius</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+    <span class="keyword">explicit</span> <span class="identifier">your_circle</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">radius</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span>
+    <span class="special">{</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special"><</span><span class="keyword">double</span><span class="special">>()</span> <span class="special">*</span> <span class="identifier">radius</span> <span class="special">*</span> <span class="number">2.0</span><span class="special">;</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special"><</span><span class="keyword">double</span><span class="special">>()</span> <span class="special">*</span> <span class="identifier">radius</span> <span class="special">*</span> <span class="identifier">radius</span><span class="special">;</span>
+    <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">some_right_triangle</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+    <span class="keyword">double</span> <span class="identifier">base</span><span class="special">;</span>
+    <span class="keyword">double</span> <span class="identifier">height</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+    <span class="identifier">some_right_triangle</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">h</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="identifier">b</span><span class="special">),</span> <span class="identifier">height</span><span class="special">(</span><span class="identifier">h</span><span class="special">)</span>
+    <span class="special">{</span>
+    <span class="special">}</span>
+
+    <span class="identifier">some_right_triangle</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="number">1.0</span><span class="special">),</span> <span class="identifier">height</span><span class="special">(</span><span class="number">1.0</span><span class="special">)</span>
+    <span class="special">{</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span>
+        <span class="keyword">return</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">base</span> <span class="special">*</span> <span class="identifier">base</span> <span class="special">+</span> <span class="identifier">height</span> <span class="special">*</span> <span class="identifier">height</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">base</span> <span class="special">+</span> <span class="identifier">height</span><span class="special">;</span>
+    <span class="special">}</span>
+
+    <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+    <span class="special">{</span>
+        <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">half</span><span class="special"><</span><span class="keyword">double</span><span class="special">>()</span> <span class="special">*</span> <span class="identifier">base</span> <span class="special">*</span> <span class="identifier">height</span><span class="special">;</span>
+    <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+        </p>
+<p>
+          Algorithms that work on the standard containers also work on pointer containers
+          out of the box.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">add_perimeter</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">my_shape</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">shape</span><span class="special">)</span>
+<span class="special">{</span>
+    <span class="keyword">return</span> <span class="identifier">shape</span><span class="special">.</span><span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">value</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">double</span> <span class="identifier">add_area</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">my_shape</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">shape</span><span class="special">)</span>
+<span class="special">{</span>
+    <span class="keyword">return</span> <span class="identifier">shape</span><span class="special">.</span><span class="identifier">compute_area</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">value</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Shapes</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">output_shape_stats</span><span class="special">(</span><span class="identifier">Shapes</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">shapes</span><span class="special">)</span>
+<span class="special">{</span>
+    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Total perimeter length = "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulate</span><span class="special">(</span>
+        <span class="identifier">shapes</span>
+      <span class="special">,</span> <span class="number">0.0</span>
+      <span class="special">,</span> <span class="identifier">add_perimeter</span>
+    <span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Total area = "</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulate</span><span class="special">(</span>
+        <span class="identifier">shapes</span>
+      <span class="special">,</span> <span class="number">0.0</span>
+      <span class="special">,</span> <span class="identifier">add_area</span>
+    <span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+<p>
+          The <code class="computeroutput"><span class="identifier">container_gen</span></code> metafunction
+          allows you to programmatically swap out different pointer container types
+          using type selectors.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span>
+<span class="special">{</span>
+    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_listS</span><span class="special">,</span><span class="identifier">my_shape</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">shapes</span><span class="special">;</span>
+
+    <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">your_square</span><span class="special">());</span>
+    <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">your_circle</span><span class="special">());</span>
+    <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">some_right_triangle</span><span class="special">());</span>
+
+    <span class="identifier">output_shape_stats</span><span class="special">(</span><span class="identifier">shapes</span><span class="special">);</span>
+    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+<p>
+          It is possible to nest associative containers via <code class="computeroutput"><span class="identifier">container_gen</span></code>,
+          e.g.:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">container_gen</span><span class="special"><</span>
+            <span class="identifier">mapS</span>
+          <span class="special">,</span> <span class="identifier">container_gen</span><span class="special"><</span><span class="identifier">setS</span><span class="special">,</span><span class="keyword">char</span><span class="special">>::</span><span class="identifier">type</span>
+          <span class="special">,</span> std::string
+        <span class="special">>::</span><span class="identifier">type</span>
+        <span class="identifier">MapOfCharSets2Strings</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          Finally, to use some other container of your choice, define a selector
+          class and then specialize this metafunction for your selector.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.definition"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/container_gen.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,133 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>emplace_associative_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_function_gen.html" title="emplace_function_gen">
+<link rel="next" href="is_random_access_selector.html" title="is_random_access_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen"></a><a class="link" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.synopsis"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">emplace_associative_function_gen</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.description"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns a Default Constructible n-ary function object
+          type whose first argument type is a reference to an Associative Container and whose second argument
+          type is convertible to the container's key type. In practice, the type
+          of this container must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+          selector template argument. The rest of the function object's arguments,
+          if any, will be forwarded either to the container's emplacement method
+          (if <a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+          returns boost::mpl::true_ for the given selector)
+          or to the mapped type's matching constructor. The return value is a std::pair
+          whose second element evaluates to <code class="computeroutput"><span class="keyword">true</span></code>
+          upon successful insertion and whose first element is an iterator pointing
+          to the key-value pair inserted.
+        </p>
+<p>
+          The return type also defines an indexing operator that accepts a reference
+          to a container and returns a proxy object that allows emplacement function
+          calls to be chained together, much like Boost.Assign.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.definition"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/emplace_assoc_function_gen.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.example"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">example</span><span class="special">()</span>
+<span class="special">{</span>
+    <span class="keyword">typename</span> <a class="link" href="container_gen.html" title="container_gen">container_gen</a><span class="special"><</span><span class="identifier">Selector</span><span class="special">,</span><span class="keyword">int</span><span class="special">,</span>std::string<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">;</span>
+    <span class="keyword">typename</span> <a class="link" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen">emplace_associative_function_gen</a><span class="special"><</span><span class="identifier">Selector</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+    BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result1</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+    BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result2</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+    BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+
+    <span class="identifier">result1</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+    <span class="identifier">result2</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">));</span>
+
+    <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c3</span><span class="special">](-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">)(</span><span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">));</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+    <span class="identifier">example</span><span class="special"><</span><a class="link" href="selectors.html" title="Selectors">boost::map_selector</a><span class="special"><</span>boost::mpl::true_<span class="special">></span> <span class="special">>();</span>
+    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.test"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+          <test/emplace_assoc_function_gen.cpp>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,132 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>emplace_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="container_gen.html" title="container_gen">
+<link rel="next" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.emplace_function_gen"></a><a class="link" href="emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.synopsis"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">emplace_function_gen</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.description"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns a Default Constructible n-ary function object
+          type whose first argument type is a reference to a container. In practice,
+          the type of this container must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+          selector template argument. The rest of the function object's arguments,
+          if any, will be forwarded either to the container's emplacement method
+          (if <a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+          returns boost::mpl::true_ for the given selector)
+          or to the value type's matching constructor. The return value is a std::pair
+          whose second element evaluates to <code class="computeroutput"><span class="keyword">true</span></code>
+          upon successful insertion and whose first element is an iterator pointing
+          to the element inserted.
+        </p>
+<p>
+          The return type also defines an indexing operator that accepts a reference
+          to a container and returns a proxy object that allows emplacement function
+          calls to be chained together, much like Boost.Assign.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.definition"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/emplace_function_gen.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.example"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">example</span><span class="special">()</span>
+<span class="special">{</span>
+    <span class="keyword">typename</span> <a class="link" href="container_gen.html" title="container_gen">container_gen</a><span class="special"><</span><span class="identifier">Selector</span><span class="special">,</span>std::string<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">;</span>
+    <span class="keyword">typename</span> <a class="link" href="emplace_function_gen.html" title="emplace_function_gen">emplace_function_gen</a><span class="special"><</span><span class="identifier">Selector</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+    BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result1</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+    BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result2</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+    BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+
+    <span class="identifier">result1</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+    <span class="identifier">result2</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">));</span>
+
+    <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c3</span><span class="special">](</span><span class="string">"Hello,"</span><span class="special">)(</span><span class="string">"world!"</span><span class="special">);</span>
+    BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">));</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+    <span class="identifier">example</span><span class="special"><</span><a class="link" href="selectors.html" title="Selectors">boost::vector_selector</a><span class="special"><</span>boost::mpl::true_<span class="special">></span> <span class="special">>();</span>
+    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.test"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+          <test/emplace_function_gen.cpp>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,86 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>has_emplace_member_function_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="has_stable_iters_selector.html" title="has_stable_iterators_selector">
+<link rel="next" href="../changelog.html" title="Changelog">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector"></a><a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.synopsis"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">has_emplace_member_function_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.description"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports emplacement
+          construction of its elements, boost::mpl::false_ otherwise.
+        </p>
+<p>
+          The current implementation returns boost::mpl::true_ when passed in selectors
+          for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Boost.Container
+          type or a Boost.Unordered
+          container; it will return boost::mpl::false_ for all other types of
+          selectors. Specialize this metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports emplacement
+          construction of its elements.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.definition"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/has_emplace_mfunc_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,87 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>has_stable_iterators_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_tr1_selector.html" title="is_tr1_selector">
+<link rel="next" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.has_stable_iters_selector"></a><a class="link" href="has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.synopsis"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">has_stable_iterators_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.description"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> does not invalidate
+          iterators other than the argument during an <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> call, or if the <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> method does not exist, boost::mpl::false_ otherwise.
+        </p>
+<p>
+          The current implementation returns boost::mpl::false_ when passed in selectors
+          for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Hashed Associative Container, a Flat Associative Container, or a Random Access Container other than boost::array
+          or boost::container::stable_vector; it will return
+          boost::mpl::true_
+          for all other types of selectors. Specialize this metafunction to return
+          boost::mpl::false_
+          for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+          invalidates iterators other than the argument during an <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> call.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.definition"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/has_stable_iters_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_random_access_selector.html" title="is_random_access_selector">
+<link rel="next" href="is_unique_assoc_selector.html" title="is_unique_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_associative_selector"></a><a class="link" href="is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.synopsis"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_associative_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.description"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+          Associative Container concept, boost::mpl::false_ otherwise.
+        </p>
+<p>
+          If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+          are defined, then you must specialize either the <a class="link" href="is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+          metafunction or the <a class="link" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+          metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> return type models
+          the respective concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.definition"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_associative_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_flat_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector">
+<link rel="next" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector"></a><a class="link" href="is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.synopsis"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_flat_associative_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.description"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will be a Flat Associative Container -- that is, if
+          it will model the Sorted Associative Container concept and
+          its iterator type will model the Random Access Iterator concept -- boost::mpl::false_
+          otherwise.
+        </p>
+<p>
+          If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+          then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a Flat Associative Container.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.definition"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_flat_assoc_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,83 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_hashed_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_flat_assoc_selector.html" title="is_flat_associative_selector">
+<link rel="next" href="is_ptr_selector.html" title="is_ptr_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector"></a><a class="link" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.synopsis"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_hashed_associative_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.description"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+          Hashed Associative Container concept, boost::mpl::false_
+          otherwise.
+        </p>
+<p>
+          If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+          then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> models the Hashed Associative Container concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.definition"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_hashed_assoc_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_multiple_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_unique_assoc_selector.html" title="is_unique_associative_selector">
+<link rel="next" href="is_flat_assoc_selector.html" title="is_flat_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector"></a><a class="link" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.synopsis"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_multiple_associative_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.description"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+          Multiple Associative Container concept,
+          boost::mpl::false_
+          otherwise.
+        </p>
+<p>
+          If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+          are defined, then you must specialize this metafunction to return boost::mpl::true_
+          for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+          models the Multiple Associative Container concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.definition"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_multiple_assoc_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_ptr_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector">
+<link rel="next" href="is_recursive_selector.html" title="is_recursive_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_ptr_selector"></a><a class="link" href="is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.synopsis"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_ptr_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.description"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a Boost.PointerContainer, boost::mpl::false_ otherwise.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.definition"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_ptr_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,87 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_random_access_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen">
+<link rel="next" href="is_associative_selector.html" title="is_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_random_access_selector"></a><a class="link" href="is_random_access_selector.html" title="is_random_access_selector"><code class="computeroutput"><span class="identifier">is_random_access_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.synopsis"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_random_access_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.description"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The boost::adjacency_list class template
+          uses this metafunction to determine whether or not it will provide an internal
+          property map that associates its vertex descriptors with unique indices.
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+          Random Access Container concept, boost::mpl::false_
+          otherwise.
+        </p>
+<p>
+          If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+          then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> return type models
+          the Random Access Container concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.definition"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_random_access_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_recursive_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_ptr_selector.html" title="is_ptr_selector">
+<link rel="next" href="is_tr1_selector.html" title="is_tr1_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_recursive_selector"></a><a class="link" href="is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.synopsis"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_recursive_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.description"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> can be used to define
+          a Recursive Container, boost::mpl::false_ otherwise.
+        </p>
+<p>
+          The current implementation returns boost::mpl::true_ when passed in selectors
+          for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Boost.Container
+          type, a Boost.PointerContainer type, or a Boost.Unordered
+          container; it will return boost::mpl::false_ for all other types of
+          selectors. Specialize this metafunction to return boost::mpl::true_ for your custom selector
+          if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports recursive data types.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.definition"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_recursive_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_tr1_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_recursive_selector.html" title="is_recursive_selector">
+<link rel="next" href="has_stable_iters_selector.html" title="has_stable_iterators_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_tr1_selector"></a><a class="link" href="is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.synopsis"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_tr1_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.description"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Returns boost::mpl::true_ if the type to be returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a std::tr1::array, a std::tr1::unordered_set, a <a href="http://www.boost.org/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set" target="_top"><code class="computeroutput"><span class="identifier">std</span><span c
lass="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">unordered_multiset</span></code></a>, a std::tr1::unordered_map, or a std::tr1::unordered_multimap; <a href="http://www.boost.org/libs/mpl/doc/refmanual/bool.html" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span c
lass="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code></a> otherwise.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.definition"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_tr1_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,88 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_unique_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_associative_selector.html" title="is_associative_selector">
+<link rel="next" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector"></a><a class="link" href="is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.synopsis"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">is_unique_associative_selector</span>
+    <span class="special">{</span>
+        <span class="comment">// typedef ... type;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.description"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The boost::parallel_edge_traits metafunction
+          uses this metafunction to specify whether or not the storage type returned
+          by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will allow parallel
+          edges--that is, if the storage type will <span class="bold"><strong>not</strong></span>
+          model the Unique Associative Container concept. Returns
+          boost::mpl::true_
+          if the storage type <span class="bold"><strong>will</strong></span> model the Unique Associative Container concept, boost::mpl::false_
+          otherwise.
+        </p>
+<p>
+          If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+          are defined, then you must specialize this metafunction to return boost::mpl::true_
+          for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+          models the Unique Associative Container concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.definition"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/is_unique_assoc_selector.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,623 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Selectors</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. container_gen 0.3">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="container_gen.html" title="container_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.selectors"></a><a class="link" href="selectors.html" title="Selectors">Selectors</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.synopsis"></a><a class="link" href="selectors.html#container_gen.reference.selectors.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+          This library provides several selector templates, one for each STL Container model, Boost.Container, Boost.Unordered container, and Boost.PointerContainer to which it corresponds.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ConstantSize</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">array_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">vector_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">stable_vector_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">deque_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">list_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">slist_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">set_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">map_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">multiset_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">multimap_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">hash_set_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">hash_map_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">hash_multiset_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">hash_multimap_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">flat_set_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">flat_map_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">flat_multiset_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">flat_multimap_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">ConstantSize</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_array_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_vector_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_deque_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_list_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_set_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_map_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_multiset_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_multimap_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_hash_set_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_hash_map_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_hash_multiset_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+
+    <span class="keyword">template</span> <span class="special"><</span>
+        <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+      <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span>
+    <span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">ptr_hash_multimap_selector</span>
+    <span class="special">{</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+<p>
+          In turn, the default arguments of these selector templates are themselves
+          selector types.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">struct</span> <span class="identifier">default_equivalence_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+                    <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">struct</span> <span class="identifier">default_ordering_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+                    <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">struct</span> <span class="identifier">boost_hash_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">hash</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">struct</span> <span class="identifier">tr1_hash_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">hash</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">struct</span> <span class="identifier">std_allocator_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                        <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">T1</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">T1</span> <span class="keyword">const</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span> <span class="special">></span>
+                    <span class="special">>::</span><span class="identifier">type</span>
+                    <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">struct</span> <span class="identifier">std_flat_allocator_selector</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                        <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">T1</span><span class="special">></span>
+                      <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span> <span class="special">></span>
+                    <span class="special">>::</span><span class="identifier">type</span>
+                    <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+<p>
+          This library also retains the old selector types and, for completeness,
+          provides type definitions of the selector templates with default arguments.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">typedef</span> <span class="identifier">vector_selector</span><span class="special"><></span> <span class="identifier">vecS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">deque_selector</span><span class="special"><></span> <span class="identifier">dequeS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">list_selector</span><span class="special"><></span> <span class="identifier">listS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">slist_selector</span><span class="special"><></span> <span class="identifier">slistS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">set_selector</span><span class="special"><></span> <span class="identifier">setS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">map_selector</span><span class="special"><></span> <span class="identifier">mapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">multiset_selector</span><span class="special"><></span> <span class="identifier">multisetS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">multimap_selector</span><span class="special"><></span> <span class="identifier">multimapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">hash_set_selector</span><span class="special"><></span> <span class="identifier">hash_setS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">hash_map_selector</span><span class="special"><></span> <span class="identifier">hash_mapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">hash_multiset_selector</span><span class="special"><></span> <span class="identifier">hash_multisetS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">hash_multimap_selector</span><span class="special"><></span> <span class="identifier">hash_multimapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_vector_selector</span><span class="special"><></span> <span class="identifier">ptr_vecS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_deque_selector</span><span class="special"><></span> <span class="identifier">ptr_dequeS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_list_selector</span><span class="special"><></span> <span class="identifier">ptr_listS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_set_selector</span><span class="special"><></span> <span class="identifier">ptr_setS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_map_selector</span><span class="special"><></span> <span class="identifier">ptr_mapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_multiset_selector</span><span class="special"><></span> <span class="identifier">ptr_multisetS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_multimap_selector</span><span class="special"><></span> <span class="identifier">ptr_multimapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_hash_set_selector</span><span class="special"><></span> <span class="identifier">ptr_hash_setS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_hash_map_selector</span><span class="special"><></span> <span class="identifier">ptr_hash_mapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_hash_multiset_selector</span><span class="special"><></span> <span class="identifier">ptr_hash_multisetS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">ptr_hash_multimap_selector</span><span class="special"><></span> <span class="identifier">ptr_hash_multimapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">stable_vector_selector</span><span class="special"><></span> <span class="identifier">stable_vecS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">flat_set_selector</span><span class="special"><></span> <span class="identifier">flat_setS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">flat_map_selector</span><span class="special"><></span> <span class="identifier">flat_mapS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">flat_multiset_selector</span><span class="special"><></span> <span class="identifier">flat_multisetS</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">flat_multimap_selector</span><span class="special"><></span> <span class="identifier">flat_multimapS</span><span class="special">;</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.description"></a><a class="link" href="selectors.html#container_gen.reference.selectors.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Selector templates determine the return type of the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> metafunction. Since
+          the container models are not templatized on just their value types, the
+          selector templates must take in analogous arguments in order to provide
+          maximum flexibility. The following example demonstrates how a std::list with a custom allocator
+          type can become the <code class="computeroutput"><span class="identifier">OutEdgeList</span></code>
+          of a boost::adjacency_list.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">int_allocator_selector</span>
+<span class="special">{</span>
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">apply</span>
+    <span class="special">{</span>
+        <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+    <span class="special">};</span>
+<span class="special">};</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">*[])</span>
+<span class="special">{</span>
+    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special"><</span>
+        <span class="identifier">boost</span><span class="special">::</span><span class="identifier">list_selector</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">,</span><span class="identifier">int_allocator_selector</span><span class="special">></span>
+      <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span>
+      <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">directedS</span>
+    <span class="special">></span> <span class="identifier">g</span><span class="special">(</span><span class="number">5</span><span class="special">);</span>
+
+    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span>
+        <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_index</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span>
+      <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span>
+    <span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+        </p>
+<p>
+          Selector templates evaluate each parameter the same way, so the following
+          table will suffice in documenting the parameters:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">ConstantSize</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    An Integral Constant that determines
+                    the size of the boost::array or std::tr1::array type to be returned
+                    by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">IsBoost</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A Boolean Integral Constant that
+                    determines whether <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return
+                    the appropriate Boost.Container type or the corresponding
+                    C++ standard container.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">IsTR1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A Boolean Integral Constant that
+                    determines whether <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return
+                    the appropriate Boost.TR1 container or the corresponding
+                    Boost container.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">AllocatorSelector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A Unary Metafunction Class that
+                    takes in the value type and returns an allocator model. The return
+                    type will become the container template's <code class="computeroutput"><span class="identifier">Allocator</span></code>
+                    argument.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">CompareSelector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    If the selector template causes <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> to return
+                    a Sorted Associative Container,
+                    then a Unary Metafunction Class that
+                    takes in the value type and returns a Strict Weak Ordering model. If
+                    the selector template causes <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> to return
+                    a Hashed Associative Container,
+                    then a Unary Metafunction Class that
+                    takes in the value type and returns a Binary Predicate model. The return
+                    type will become the container template's <code class="computeroutput"><span class="identifier">Compare</span></code>
+                    or <code class="computeroutput"><span class="identifier">Pred</span></code> argument.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">HashSelector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A Unary Metafunction Class that
+                    takes in the value type and returns a Hash Function model. The return
+                    type will become the container template's <code class="computeroutput"><span class="identifier">Hash</span></code>
+                    argument.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">CloneAllocator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A Clone Allocator model that will
+                    become the container template's corresponding argument.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Allocator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    An allocator model that will become the container template's
+                    corresponding argument.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.definition"></a><a class="link" href="selectors.html#container_gen.reference.selectors.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/container_gen/selectors.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/index.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Chapter 1. container_gen 0.3</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="index.html" title="Chapter 1. container_gen 0.3">
+<link rel="next" href="container_gen/reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="container_gen/reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+<div class="chapter">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="container_gen"></a>Chapter 1. container_gen 0.3</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Andrew</span> <span class="surname">Lumsdaine</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Lie-Quan</span> <span class="surname">Lee</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Thomas</span> <span class="surname">Claveirole</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Jeremy G.</span> <span class="surname">Siek</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Cromwell D.</span> <span class="surname">Enage</span>
+</h3></div></div>
+<div><p class="copyright">Copyright © 1997-2012 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole,
+      Jeremy G. Siek, Cromwell D. Enage</p></div>
+<div><div class="legalnotice">
+<a name="container_gen.legal"></a><p>
+        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)
+      </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Reference</span></dt>
+<dt><span class="section">Changelog</span></dt>
+</dl>
+</div>
+<h3>
+<a name="container_gen.h0"></a>
+    <span class="phrase"><a name="container_gen.rationale"></a></span><a class="link" href="index.html#container_gen.rationale">Rationale</a>
+  </h3>
+<p>
+    Significant interest was expressed in moving the <code class="computeroutput"><span class="identifier">container_gen</span></code>
+    metafunction from its current place in the BGL
+    to a more general or first-class residence. The relevant discussion is archived
+    here: http://listarchives.boost.org/Archives/boost/2011/05/181573.php.
+  </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: September 08, 2012 at 06:00:57 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="container_gen/reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+</body>
+</html>
Added: sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,75 @@
+[/=============================================================================
+    Copyright (C) 2000-2001 Jeremy G. Siek
+    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])
+=============================================================================/]
+
+[section:container_gen `container_gen`]
+
+[section Synopsis]
+[reference__container_gen]
+[endsect]
+
+[section Description]
+The __graph_adjacency_list__ class template uses this metafunction to map the
+`OutEdgeList` and `VertexList` selectors to the actual container types used
+for the graph storage.  You can also use this metafunction to determine the
+appropriate associative container type given the specified selector.  The
+example routine below uses the `container_gen` return type to associate each
+distinct string character with the number of times it appears in the string.
+
+[example__output_char_tallies__definition]
+
+This library provides specializations of this metafunction class for each
+selector it provides whose resulting storage type models the __STL_Container__
+concept.  Here, two such selectors are passed in calls to the example routine.
+
+[example__output_char_tallies__calls]
+
+The `container_gen` specialization for the `multimap_selector` template is
+shown here.
+
+[reference__container_gen__multimap_specialization]
+
+You can use `container_gen` to easily select an appropriate
+__Boost_Pointer_Container__ type.  Pointer containers are ideal for storing
+heterogeneous items with a common base type, e.g. shapes:
+
+[example__output_shape_stats__type_definitions]
+
+Algorithms that work on the standard containers also work on pointer containers
+out of the box.
+
+[example__output_shape_stats__functions]
+
+The `container_gen` metafunction allows you to programmatically swap out
+different pointer container types using type selectors.
+
+[example__output_shape_stats__usage]
+
+It is possible to nest associative containers via `container_gen`, e.g.:
+
+``
+typedef container_gen<
+            mapS
+          , container_gen<setS,char>::type
+          , _std_string_
+        >::type
+        MapOfCharSets2Strings;
+``
+
+Finally, to use some other container of your choice, define a selector
+class and then specialize this metafunction for your selector.
+[endsect] [/ Description]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_container_gen_hpp__>
+``
+[endsect]
+
+[endsect] [/ container_gen]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,73 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_assoc_function_gen `emplace_associative_function_gen`]
+
+[section Synopsis]
+[reference__emplace_associative_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ n-ary function object type whose first
+argument type is a reference to an __Associative_Container__ and whose second
+argument type is convertible to the container's key type.  In practice, the
+type of this container must be produced by __container_gen__ when given the
+same selector template argument.  The rest of the function object's arguments,
+if any, will be forwarded either to the container's emplacement method (if
+__has_emplace_member_function_selector__ returns __mpl_true__ for the given
+selector) or to the mapped type's matching constructor.  The return value is a
+__std_pair__ whose second element evaluates to `true` upon successful insertion
+and whose first element is an iterator pointing to the key-value pair inserted.
+
+The return type also defines an indexing operator that accepts a reference to a
+container and returns a proxy object that allows emplacement function calls to
+be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_emplace_assoc_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+``
+template <typename Selector>
+void example()
+{
+    typename _container_gen_<Selector,int,_std_string_>::type c1, c2, c3;
+    typename _emplace_associative_function_gen_<Selector>::type emplacer;
+
+    _AUTO_TPL_(result1, emplacer(c1, -1, "Hello,"));
+    _AUTO_TPL_(result2, emplacer(c2, -1, "Hello,"));
+    _ASSERT_(result1 == result2);
+
+    result1 = emplacer(c1, 42, "world!");
+    result2 = emplacer(c2, 42, "world!");
+    _ASSERT_(result1 == result2);
+    _ASSERT_(_range_equal_(c1, c2));
+
+    emplacer[c3](-1, "Hello,")(42, "world!");
+    _ASSERT_(_range_equal_(c1, c3));
+}
+
+int main()
+{
+    example<_map_selector_<_mpl_true_> >();
+    return 0;
+}
+``
+[endsect]
+
+[section Test]
+[@../../test/emplace_assoc_function_gen.cpp
+`<test/emplace_assoc_function_gen.cpp>`]
+[endsect]
+
+[endsect] [/ emplace_associative_function_gen]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,71 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_function_gen `emplace_function_gen`]
+
+[section Synopsis]
+[reference__emplace_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ n-ary function object type whose first
+argument type is a reference to a container.  In practice, the type of this
+container must be produced by __container_gen__ when given the same selector
+template argument.  The rest of the function object's arguments, if any,
+will be forwarded either to the container's emplacement method (if
+__has_emplace_member_function_selector__ returns __mpl_true__ for the given
+selector) or to the value type's matching constructor.  The return value is a
+__std_pair__ whose second element evaluates to `true` upon successful insertion
+and whose first element is an iterator pointing to the element inserted.
+
+The return type also defines an indexing operator that accepts a reference to a
+container and returns a proxy object that allows emplacement function calls to
+be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_emplace_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+``
+template <typename Selector>
+void example()
+{
+    typename _container_gen_<Selector,_std_string_>::type c1, c2, c3;
+    typename _emplace_function_gen_<Selector>::type emplacer;
+
+    _AUTO_TPL_(result1, emplacer(c1, "Hello,"));
+    _AUTO_TPL_(result2, emplacer(c2, "Hello,"));
+    _ASSERT_(result1 == result2);
+
+    result1 = emplacer(c1, "world!");
+    result2 = emplacer(c2, "world!");
+    _ASSERT_(result1 == result2);
+    _ASSERT_(_range_equal_(c1, c2));
+
+    emplacer[c3]("Hello,")("world!");
+    _ASSERT_(_range_equal_(c1, c3));
+}
+
+int main()
+{
+    example<_vector_selector_<_mpl_true_> >();
+    return 0;
+}
+``
+[endsect]
+
+[section Test]
+[@../../test/emplace_function_gen.cpp `<test/emplace_function_gen.cpp>`]
+[endsect]
+
+[endsect] [/ emplace_function_gen]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,34 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:has_emplace_mfunc_selector `has_emplace_member_function_selector`]
+
+[section Synopsis]
+[reference__has_emplace_member_function_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ supports
+emplacement construction of its elements, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_true__ when passed in selectors
+for which __container_gen__ will return a __Boost_Container__ type or a
+__Boost_Unordered__ container; it will return __mpl_false__ for all other types
+of selectors.  Specialize this metafunction to return __mpl_true__ for your
+custom selector if and only if the type to be returned by __container_gen__
+supports emplacement construction of its elements.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_has_emplace_mfunc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ has_emplace_member_function_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,37 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:has_stable_iters_selector `has_stable_iterators_selector`]
+
+[section Synopsis]
+[reference__has_stable_iterators_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ does not
+invalidate iterators other than the argument during an `erase()` call, or if
+the `erase()` method does not exist, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_false__ when passed in selectors for
+which __container_gen__ will return a __Hashed_Associative_Container__, a
+__Flat_Associative_Container__, or a __Random_Access_Container__ other than
+__array__ or __container_stable_vector__; it will return __mpl_true__ for all
+other types of selectors.  Specialize this metafunction to return __mpl_false__
+for your custom selector if and only if the type to be returned by
+__container_gen__ invalidates iterators other than the argument
+during an `erase()` call.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_has_stable_iters_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ has_stable_iterators_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,33 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_associative_selector `is_associative_selector`]
+
+[section Synopsis]
+[reference__is_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Associative_Container__ concept, __mpl_false__ otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize either the __is_unique_associative_selector__ metafunction or
+the __is_multiple_associative_selector__ metafunction to return __mpl_true__
+for your custom selector if and only if the __container_gen__ return type
+models the respective concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_associative_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_associative_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,34 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_flat_assoc_selector `is_flat_associative_selector`]
+
+[section Synopsis]
+[reference__is_flat_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will be a
+__Flat_Associative_Container__ -- that is, if it will model the
+__Sorted_Associative_Container__ concept and its iterator type will model the
+__Random_Access_Iterator__ concept -- __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and
+only if the type to be returned by __container_gen__ is a
+__Flat_Associative_Container__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_flat_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_flat_associative_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,32 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_hashed_assoc_selector `is_hashed_associative_selector`]
+
+[section Synopsis]
+[reference__is_hashed_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Hashed_Associative_Container__ concept, __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and
+only if the type to be returned by __container_gen__ models
+the __Hashed_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_hashed_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_hashed_associative_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,32 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_multiple_assoc_selector `is_multiple_associative_selector`]
+
+[section Synopsis]
+[reference__is_multiple_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Multiple_Associative_Container__ concept, __mpl_false__ otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize this metafunction to return __mpl_true__ for your custom
+selector if and only if the type to be returned by __container_gen__ models the
+__Multiple_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_multiple_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_multiple_associative_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,27 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_ptr_selector `is_ptr_selector`]
+
+[section Synopsis]
+[reference__is_ptr_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ is a
+__Boost_Pointer_Container__, __mpl_false__ otherwise.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_ptr_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_ptr_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,35 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_random_access_selector `is_random_access_selector`]
+
+[section Synopsis]
+[reference__is_random_access_selector]
+[endsect]
+
+[section Description]
+The __graph_adjacency_list__ class template uses this metafunction to determine
+whether or not it will provide an internal property map that associates its
+vertex descriptors with unique indices.  Returns __mpl_true__ if the type to be
+returned by __container_gen__ will model the __Random_Access_Container__
+concept, __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and only if
+the __container_gen__ return type models the __Random_Access_Container__
+concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_random_access_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_random_access_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,34 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_recursive_selector `is_recursive_selector`]
+
+[section Synopsis]
+[reference__is_recursive_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ can be
+used to define a __Recursive_Container__, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_true__ when passed in selectors
+for which __container_gen__ will return a __Boost_Container__ type, a
+__Boost_Pointer_Container__ type, or a __Boost_Unordered__ container; it will
+return __mpl_false__ for all other types of selectors.  Specialize this
+metafunction to return __mpl_true__ for your custom selector if and only if the
+type to be returned by __container_gen__ supports __recursive_data_types__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_recursive_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_recursive_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_tr1_selector `is_tr1_selector`]
+
+[section Synopsis]
+[reference__is_tr1_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ is a
+__tr1_array__, a __tr1_unordered_set__, a __tr1_unordered_multiset__, a
+__tr1_unordered_map__, or a __tr1_unordered_multimap__; __mpl_false__
+otherwise.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_tr1_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_tr1_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,36 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:is_unique_assoc_selector `is_unique_associative_selector`]
+
+[section Synopsis]
+[reference__is_unique_associative_selector]
+[endsect]
+
+[section Description]
+The __graph_parallel_edge_traits__ metafunction uses this metafunction to
+specify whether or not the storage type returned by __container_gen__ will
+allow parallel edges--that is, if the storage type will *not* model the
+__Unique_Associative_Container__ concept.  Returns __mpl_true__ if the storage
+type *will* model the __Unique_Associative_Container__ concept, __mpl_false__
+otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize this metafunction to return __mpl_true__ for your custom
+selector if and only if the type to be returned by __container_gen__ models the
+__Unique_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_unique_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_unique_associative_selector]
+
Added: sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,121 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Selectors]
+
+[section Synopsis]
+This library provides several selector templates, one for each
+__STL_Container__ model, __Boost_Container__, __Boost_Unordered__ container,
+and __Boost_Pointer_Container__ to which it corresponds.
+
+[reference__container_selector_templates]
+
+In turn, the default arguments of these selector templates are themselves
+selector types.
+
+[reference__template_argument_selectors]
+
+This library also retains the old selector types and, for completeness,
+provides type definitions of the selector templates with default arguments.
+
+[reference__container_selector_typedefs]
+[endsect]
+
+[section Description]
+Selector templates determine the return type of the __container_gen__
+metafunction.  Since the container models are not templatized on just their
+value types, the selector templates must take in analogous arguments in order
+to provide maximum flexibility.  The following example demonstrates how a
+__std_list__ with a custom allocator type can become the `OutEdgeList` of a
+__graph_adjacency_list__.
+
+[example__container_gen__list_with_custom_allocator_selector]
+
+Selector templates evaluate each parameter the same way, so the following table
+will suffice in documenting the parameters:
+
+[table
+    [[Parameter][Description]]
+    [
+        [`ConstantSize`]
+        [
+            An __Integral_Constant__ that determines the size of the __array__
+            or __tr1_array__ type to be returned by __container_gen__.
+        ]
+    ]
+    [
+        [`IsBoost`]
+        [
+            A __Boolean_Integral_Constant__ that determines whether
+            __container_gen__ will return the appropriate __Boost_Container__
+            type or the corresponding C++ standard container.
+        ]
+    ]
+    [
+        [`IsTR1`]
+        [
+            A __Boolean_Integral_Constant__ that determines whether
+            __container_gen__ will return the appropriate __Boost_TR1__
+            container or the corresponding Boost container.
+        ]
+    ]
+    [
+        [`AllocatorSelector`]
+        [
+            A __Unary_Metafunction_Class__ that takes in the value type and
+            returns an allocator model.  The return type will become the
+            container template's `Allocator` argument.
+        ]
+    ]
+    [
+        [`CompareSelector`]
+        [
+            If the selector template causes __container_gen__ to return a
+            __Sorted_Associative_Container__, then a
+            __Unary_Metafunction_Class__ that takes in the value type and
+            returns a __Strict_Weak_Ordering__ model.  If the selector template
+            causes __container_gen__ to return a
+            __Hashed_Associative_Container__, then a
+            __Unary_Metafunction_Class__ that takes in the value type and
+            returns a __Binary_Predicate__ model.  The return type will become
+            the container template's `Compare` or `Pred` argument.
+        ]
+    ]
+    [
+        [`HashSelector`]
+        [
+            A __Unary_Metafunction_Class__ that takes in the value type and
+            returns a __Hash_Function__ model.  The return type will become the
+            container template's `Hash` argument.
+        ]
+    ]
+    [
+        [`CloneAllocator`]
+        [
+            A __Clone_Allocator__ model that will become the container
+            template's corresponding argument.
+        ]
+    ]
+    [
+        [`Allocator`]
+        [
+            An allocator model that will become the container template's
+            corresponding argument.
+        ]
+    ]
+]
+[endsect] [/ Description]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_selectors_hpp__>
+``
+[endsect]
+
+[endsect] [/ Selectors]
+
Added: sandbox/container_gen/libs/container_gen/doc/reference.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/reference.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,50 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Reference]
+
+[include ref_selectors.qbk]
+[include ref_container_gen.qbk]
+[include ref_emplace_function_gen.qbk]
+[include ref_emplace_assoc_func_gen.qbk]
+[include ref_is_rand_access_selector.qbk]
+[include ref_is_associative_selector.qbk]
+[include ref_is_unique_assoc_sel.qbk]
+[include ref_is_multiple_assoc_sel.qbk]
+[include ref_is_flat_assoc_selector.qbk]
+[include ref_is_hashed_assoc_sel.qbk]
+[include ref_is_ptr_selector.qbk]
+[include ref_is_recursive_selector.qbk]
+[include ref_is_tr1_selector.qbk]
+[include ref_has_stable_iters_sel.qbk]
+[include ref_has_emplace_mfunc_sel.qbk]
+
+  * __Selectors__
+
+[heading Type Generation Metafunctions]
+
+  * __container_gen__
+  * __emplace_function_gen__
+  * __emplace_associative_function_gen__
+
+[heading Selector Introspection Metafunctions]
+
+  * __is_random_access_selector__
+  * __is_associative_selector__
+  * __is_unique_associative_selector__
+  * __is_multiple_associative_selector__
+  * __is_flat_associative_selector__
+  * __is_hashed_associative_selector__
+  * __is_ptr_selector__
+  * __is_recursive_selector__
+  * __is_tr1_selector__
+  * __has_stable_iterators_selector__
+  * __has_emplace_member_function_selector__
+
+[endsect] [/ Reference]
+
Added: sandbox/container_gen/libs/container_gen/example/output_char_tallies.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/example/output_char_tallies.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,67 @@
+//=======================================================================
+// 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 <string>
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+
+//[example__output_char_tallies__definition
+template <typename Selector>
+void output_char_tallies(std::string const& str, Selector)
+{
+    typedef typename boost::container_gen<Selector,char,std::size_t>::type
+            FrequencyTable;
+
+    FrequencyTable freq_table;
+    char reverse_counter = 0;
+
+    for (std::size_t i = 0; i < str.size(); ++i)
+    {
+        typename FrequencyTable::iterator ft_itr = freq_table.find(str[i]);
+
+        if (ft_itr == freq_table.end())
+        {
+            freq_table.insert(typename FrequencyTable::value_type(str[i], 1));
+        }
+        else
+        {
+            ++ft_itr->second;
+        }
+    }
+
+    for (
+        typename FrequencyTable::const_iterator ft_itr = freq_table.begin();
+        ft_itr != freq_table.end();
+        ++ft_itr
+    )
+    {
+        std::cout << ft_itr->first << ": " << ft_itr->second << std::endl;
+    }
+
+    std::cout << std::endl;
+}
+//]
+
+//[example__output_char_tallies__calls
+int main(int, char**)
+{
+//<-
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+//->
+    output_char_tallies("abacadabra", boost::hash_mapS());
+//<-
+#else
+    output_char_tallies("abacadabra", boost::mapS());
+#endif
+//->
+    output_char_tallies("loolapalooza", boost::multimapS());
+    return 0;
+}
+//]
+
Added: sandbox/container_gen/libs/container_gen/example/output_shape_stats.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/example/output_shape_stats.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,135 @@
+//=======================================================================
+// 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 <string>
+#include <cmath>
+#include <boost/math/constants/constants.hpp>
+#include <boost/range/numeric.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+
+//[example__output_shape_stats__type_definitions
+struct my_shape
+{
+    virtual ~my_shape()
+    {
+    }
+
+    virtual double compute_perimeter() const = 0;
+
+    virtual double compute_area() const = 0;
+};
+
+class your_square : public my_shape
+{
+    double length;
+
+ public:
+    explicit your_square(double s = 1.0) : length(s)
+    {
+    }
+
+    double compute_perimeter() const
+    {
+        return length * 4.0;
+    }
+
+    double compute_area() const
+    {
+        return length * length;
+    }
+};
+
+class your_circle : public my_shape
+{
+    double radius;
+
+ public:
+    explicit your_circle(double r = 1.0) : radius(r)
+    {
+    }
+
+    double compute_perimeter() const
+    {
+        return boost::math::constants::pi<double>() * radius * 2.0;
+    }
+
+    double compute_area() const
+    {
+        return boost::math::constants::pi<double>() * radius * radius;
+    }
+};
+
+class some_right_triangle : public my_shape
+{
+    double base;
+    double height;
+
+ public:
+    some_right_triangle(double b, double h) : base(b), height(h)
+    {
+    }
+
+    some_right_triangle() : base(1.0), height(1.0)
+    {
+    }
+
+    double compute_perimeter() const
+    {
+        using namespace std;
+        return sqrt(base * base + height * height) + base + height;
+    }
+
+    double compute_area() const
+    {
+        return boost::math::constants::half<double>() * base * height;
+    }
+};
+//]
+
+//[example__output_shape_stats__functions
+double add_perimeter(double value, my_shape const& shape)
+{
+    return shape.compute_perimeter() + value;
+}
+
+double add_area(double value, my_shape const& shape)
+{
+    return shape.compute_area() + value;
+}
+
+template <typename Shapes>
+void output_shape_stats(Shapes const& shapes)
+{
+    std::cout << "Total perimeter length = " << boost::accumulate(
+        shapes
+      , 0.0
+      , add_perimeter
+    ) << std::endl;
+    std::cout << "Total area = " << boost::accumulate(
+        shapes
+      , 0.0
+      , add_area
+    ) << std::endl;
+}
+//]
+
+//[example__output_shape_stats__usage
+int main(int, char**)
+{
+    boost::container_gen<boost::ptr_listS,my_shape>::type shapes;
+
+    shapes.push_back(new your_square());
+    shapes.push_back(new your_circle());
+    shapes.push_back(new some_right_triangle());
+
+    output_shape_stats(shapes);
+    return 0;
+}
+//]
+
Added: sandbox/container_gen/libs/container_gen/test/emplace_assoc_function_gen.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/emplace_assoc_function_gen.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,551 @@
+// 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 <boost/config.hpp>
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
+#include <utility>
+#include <cstring>
+#include <boost/mpl/bool.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/utility/get_iterator_second.hpp>
+#include <boost/utility/get_iterator_value_second.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_multiple_assoc_selector.hpp>
+#include "type_definitions.hpp"
+#include <boost/test/minimal.hpp>
+
+template <typename Emplacer, typename C>
+void
+    test_emplacer(
+        Emplacer const& emplacer
+      , C& c
+      , bool should_be_successful
+      , typename C::key_type const& key
+    )
+{
+    typename C::size_type old_size = c.size();
+    std::pair<typename C::iterator,bool> p = emplacer(c, key);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        BOOST_CHECK(!strcmp(boost::get_iterator_second(p.first).c_str(), ""));
+        BOOST_CHECK(c.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(c.size() == old_size);
+    }
+}
+
+template <typename Emplacer, typename C>
+void
+    test_emplacer(
+        Emplacer const& emplacer
+      , C& c
+      , bool should_be_successful
+      , typename C::key_type const& key
+      , char const* value
+    )
+{
+    typename C::size_type old_size = c.size();
+    std::pair<typename C::iterator,bool> p = emplacer(c, key, value);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).c_str(), value)
+        );
+        BOOST_CHECK(c.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(c.size() == old_size);
+    }
+}
+
+template <typename Selector>
+void test_empl_assoc_func_gen()
+{
+    typename boost::container_gen<Selector,int,test_string>::type
+        test_container_1, test_container_2;
+    typename boost::emplace_associative_function_gen<Selector>::type emplacer;
+    bool is_multi = boost::is_multiple_associative_selector<Selector>::value;
+
+    test_emplacer(emplacer, test_container_1, true, 3, "able");
+    test_emplacer(emplacer, test_container_1, true, -3, "fox");
+    test_emplacer(emplacer, test_container_1, true, 2);
+    test_emplacer(emplacer, test_container_1, true, -2, "baker");
+    test_emplacer(emplacer, test_container_1, true, 1, "charlie");
+    test_emplacer(emplacer, test_container_1, true, -1, "dog");
+    test_emplacer(emplacer, test_container_1, is_multi, -1, "able");
+    test_emplacer(emplacer, test_container_1, is_multi, 1, "fox");
+    test_emplacer(emplacer, test_container_1, is_multi, -2);
+    test_emplacer(emplacer, test_container_1, is_multi, 2, "baker");
+    test_emplacer(emplacer, test_container_1, is_multi, -3, "charlie");
+    test_emplacer(emplacer, test_container_1, is_multi, 3, "dog");
+
+    emplacer[test_container_2]
+        (3, "able")(-3, "fox")(2)(-2, "baker")(1, "charlie")(-1, "dog")
+        (-1, "able")(1, "fox")(-2)(2, "baker")(-3, "charlie")(3, "dog");
+
+    BOOST_CHECK(boost::range::equal(test_container_1, test_container_2));
+}
+
+template <typename T>
+void test_recursive_element(T const& t)
+{
+    BOOST_CHECK(
+        !strcmp(t.word.c_str(), "")
+     || !strcmp(t.word.c_str(), "secret")
+    );
+    BOOST_CHECK((t.number == 0) || (t.number == 42));
+    BOOST_CHECK((t.letter == '\0') || (t.letter == 'X'));
+
+    typedef typename T::next_level_t C;
+    typename C::const_iterator itr_end = t.next_level.end();
+
+    for (
+        typename C::const_iterator itr = t.next_level.begin();
+        itr != itr_end;
+        ++itr
+    )
+    {
+        BOOST_CHECK(boost::get_iterator_second(itr).previous_level == &t);
+        test_recursive_element(boost::get_iterator_second(itr));
+    }
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , bool should_be_successful
+      , typename T::next_level_t::key_type const& key
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(t.next_level, key);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        test_recursive_element(boost::get_iterator_second(p.first));
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).word.c_str(), "")
+        );
+        BOOST_CHECK(boost::get_iterator_second(p.first).number == 0);
+        BOOST_CHECK(boost::get_iterator_second(p.first).letter == '\0');
+        BOOST_CHECK(boost::get_iterator_second(p.first).flag == false);
+        BOOST_CHECK(t.next_level.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(t.next_level.size() == old_size);
+    }
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , bool should_be_successful
+      , typename T::next_level_t::key_type const& key
+      , char const* word
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(t.next_level, key, word);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        test_recursive_element(boost::get_iterator_second(p.first));
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).word.c_str(), word)
+        );
+        BOOST_CHECK(boost::get_iterator_second(p.first).number == 0);
+        BOOST_CHECK(boost::get_iterator_second(p.first).letter == '\0');
+        BOOST_CHECK(boost::get_iterator_second(p.first).flag == false);
+        BOOST_CHECK(t.next_level.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(t.next_level.size() == old_size);
+    }
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , bool should_be_successful
+      , typename T::next_level_t::key_type const& key
+      , char const* word
+      , long n
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<
+        typename C::iterator
+      , bool
+    > p = emplacer(t.next_level, key, word, n);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        test_recursive_element(boost::get_iterator_second(p.first));
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).word.c_str(), word)
+        );
+        BOOST_CHECK(boost::get_iterator_second(p.first).number == n);
+        BOOST_CHECK(boost::get_iterator_second(p.first).letter == '\0');
+        BOOST_CHECK(boost::get_iterator_second(p.first).flag == false);
+        BOOST_CHECK(t.next_level.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(t.next_level.size() == old_size);
+    }
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , bool should_be_successful
+      , typename T::next_level_t::key_type const& key
+      , char const* word
+      , long n
+      , char letter
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<
+        typename C::iterator
+      , bool
+    > p = emplacer(t.next_level, key, word, n, letter);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        test_recursive_element(boost::get_iterator_second(p.first));
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).word.c_str(), word)
+        );
+        BOOST_CHECK(boost::get_iterator_second(p.first).number == n);
+        BOOST_CHECK(boost::get_iterator_second(p.first).letter == letter);
+        BOOST_CHECK(boost::get_iterator_second(p.first).flag == false);
+        BOOST_CHECK(t.next_level.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(t.next_level.size() == old_size);
+    }
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , bool should_be_successful
+      , typename T::next_level_t::key_type const& key
+      , char const* word
+      , long n
+      , char letter
+      , bool b
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<
+        typename C::iterator
+      , bool
+    > p = emplacer(t.next_level, key, word, n, letter, b);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(p.first->first == key);
+        test_recursive_element(boost::get_iterator_second(p.first));
+        BOOST_CHECK(
+            !strcmp(boost::get_iterator_second(p.first).word.c_str(), word)
+        );
+        BOOST_CHECK(boost::get_iterator_second(p.first).number == n);
+        BOOST_CHECK(boost::get_iterator_second(p.first).letter == letter);
+        BOOST_CHECK(boost::get_iterator_second(p.first).flag == b);
+        BOOST_CHECK(t.next_level.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(t.next_level.size() == old_size);
+    }
+}
+
+template <typename Selector>
+void test_empl_assoc_func_gen_recursive()
+{
+    test_recursive_data<Selector,int> top;
+    typename boost::emplace_associative_function_gen<Selector>::type emplacer;
+
+    test_emplacer_recursive(emplacer, top, true, 0);
+    test_emplacer_recursive(emplacer, top, true, 1, "secret");
+    test_emplacer_recursive(
+        emplacer
+      , boost::get_iterator_second(top.next_level.find(1))
+      , true
+      , 2
+      , "secret"
+      , 42
+    );
+    test_emplacer_recursive(
+        emplacer
+      , boost::get_iterator_second(top.next_level.find(1))
+      , true
+      , 3
+      , "secret"
+      , 42
+      , 'X'
+    );
+    test_emplacer_recursive(emplacer, top, true, 4, "secret", 42, 'X', true);
+}
+
+template <typename Pair1, typename Pair2>
+void test_emplace_results(Pair1 const& p1, Pair2 const& p2)
+{
+    BOOST_CHECK(p1.second == p2.second);
+
+    if (p1.second)
+    {
+        BOOST_CHECK(p1.first->first == p2.first->first);
+        BOOST_CHECK(
+            boost::get_iterator_second(p1.first)
+         == boost::get_iterator_second(p2.first)
+        );
+    }
+}
+
+struct test_string_comparator
+{
+    template <typename Pair1, typename Pair2>
+    bool operator()(Pair1 const& p1, Pair2 const& p2) const
+    {
+        return (
+            (p1.first == p2.first)
+         && (
+                boost::get_iterator_value_second(p1)
+             == boost::get_iterator_value_second(p2)
+            )
+        );
+    }
+};
+
+template <typename Selector1, typename Selector2>
+void test_empl_assoc_func_gens()
+{
+    typename boost::container_gen<Selector1,int,test_string>::type container_1;
+    typename boost::container_gen<Selector2,int,test_string>::type container_2;
+    typename boost::emplace_associative_function_gen<Selector1>::type adder_1;
+    typename boost::emplace_associative_function_gen<Selector2>::type adder_2;
+    test_string_comparator comparator;
+
+    test_emplace_results(
+        adder_1(container_1, 3, "able")
+      , adder_2(container_2, 3, "able")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, -3, "fox")
+      , adder_2(container_2, -3, "fox")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(adder_1(container_1, 2), adder_2(container_2, 2));
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, -2, "baker")
+      , adder_2(container_2, -2, "baker")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, 1, "charlie")
+      , adder_2(container_2, 1, "charlie")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, -1, "dog")
+      , adder_2(container_2, -1, "dog")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, -1, "able")
+      , adder_2(container_2, -1, "able")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, 1, "fox")
+      , adder_2(container_2, 1, "fox")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(adder_1(container_1, -2), adder_2(container_2, -2));
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, 2, "baker")
+      , adder_2(container_2, 2, "baker")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, -3, "charlie")
+      , adder_2(container_2, -3, "charlie")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+    test_emplace_results(
+        adder_1(container_1, 3, "dog")
+      , adder_2(container_2, 3, "dog")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2, comparator));
+}
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
+int test_main(int argc, char** argv)
+{
+    test_empl_assoc_func_gen<boost::setS>();
+    test_empl_assoc_func_gen<boost::mapS>();
+    test_empl_assoc_func_gen<boost::multisetS>();
+    test_empl_assoc_func_gen<boost::multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    test_empl_assoc_func_gen<boost::hash_setS>();
+    test_empl_assoc_func_gen<boost::hash_mapS>();
+    test_empl_assoc_func_gen<boost::hash_multisetS>();
+    test_empl_assoc_func_gen<boost::hash_multimapS>();
+#endif
+    test_empl_assoc_func_gen<boost::ptr_setS>();
+    test_empl_assoc_func_gen<boost::ptr_mapS>();
+    test_empl_assoc_func_gen<boost::ptr_multisetS>();
+    test_empl_assoc_func_gen<boost::ptr_multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_empl_assoc_func_gen<boost::ptr_hash_setS>();
+    test_empl_assoc_func_gen<boost::ptr_hash_mapS>();
+    test_empl_assoc_func_gen<boost::ptr_hash_multisetS>();
+    test_empl_assoc_func_gen<boost::ptr_hash_multimapS>();
+    test_empl_assoc_func_gen<boost::set_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<boost::map_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<boost::multiset_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<boost::multimap_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<boost::hash_set_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<boost::hash_map_selector<boost::mpl::true_> >();
+    test_empl_assoc_func_gen<
+        boost::hash_multiset_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen<
+        boost::hash_multimap_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen<boost::flat_setS>();
+    test_empl_assoc_func_gen<boost::flat_mapS>();
+    test_empl_assoc_func_gen<boost::flat_multisetS>();
+    test_empl_assoc_func_gen<boost::flat_multimapS>();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    test_empl_assoc_func_gen_recursive<boost::ptr_setS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_mapS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_multisetS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_empl_assoc_func_gen_recursive<boost::ptr_hash_setS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_hash_mapS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_hash_multisetS>();
+    test_empl_assoc_func_gen_recursive<boost::ptr_hash_multimapS>();
+    test_empl_assoc_func_gen_recursive<
+        boost::set_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::map_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::multiset_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::multimap_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::hash_set_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::hash_map_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::hash_multiset_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<
+        boost::hash_multimap_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gen_recursive<boost::flat_setS>();
+    test_empl_assoc_func_gen_recursive<boost::flat_mapS>();
+    test_empl_assoc_func_gen_recursive<boost::flat_multisetS>();
+    test_empl_assoc_func_gen_recursive<boost::flat_multimapS>();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    test_empl_assoc_func_gens<boost::setS,boost::ptr_setS>();
+    test_empl_assoc_func_gens<boost::mapS,boost::ptr_mapS>();
+    test_empl_assoc_func_gens<boost::multisetS,boost::ptr_multisetS>();
+    test_empl_assoc_func_gens<boost::multimapS,boost::ptr_multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_empl_assoc_func_gens<
+        boost::setS
+      , boost::set_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gens<
+        boost::mapS
+      , boost::map_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gens<
+        boost::multisetS
+      , boost::multiset_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gens<
+        boost::multimapS
+      , boost::multimap_selector<boost::mpl::true_>
+    >();
+    test_empl_assoc_func_gens<boost::setS,boost::flat_setS>();
+    test_empl_assoc_func_gens<boost::mapS,boost::flat_mapS>();
+    test_empl_assoc_func_gens<boost::multisetS,boost::flat_multisetS>();
+    test_empl_assoc_func_gens<boost::multimapS,boost::flat_multimapS>();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    return 0;
+}
+
Added: sandbox/container_gen/libs/container_gen/test/emplace_function_gen.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/emplace_function_gen.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,548 @@
+// 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 <boost/config.hpp>
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
+#include <utility>
+#include <cstring>
+#include <boost/mpl/bool.hpp>
+#include <boost/range/algorithm/equal.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_unique_assoc_selector.hpp>
+#include "type_definitions.hpp"
+#include <boost/test/minimal.hpp>
+
+template <typename Emplacer, typename C>
+void
+    test_emplacer(
+        Emplacer const& emplacer
+      , C& c
+      , bool should_be_successful
+      , char const* value
+    )
+{
+    typename C::size_type old_size = c.size();
+    std::pair<typename C::iterator,bool> p = emplacer(c, value);
+
+    BOOST_CHECK(p.second == should_be_successful);
+
+    if (p.second)
+    {
+        BOOST_CHECK(!strcmp(p.first->c_str(), value));
+        BOOST_CHECK(c.size() == old_size + 1);
+    }
+    else
+    {
+        BOOST_CHECK(c.size() == old_size);
+    }
+}
+
+template <typename Selector>
+void test_emplace_function_gen()
+{
+    typename boost::container_gen<Selector,test_string>::type
+        test_container_1, test_container_2;
+    typename boost::emplace_function_gen<Selector>::type emplacer;
+    bool is_multi = !boost::is_unique_associative_selector<Selector>::value;
+
+    test_emplacer(emplacer, test_container_1, true, "able");
+    test_emplacer(emplacer, test_container_1, true, "fox");
+    test_emplacer(emplacer, test_container_1, true, "easy");
+    test_emplacer(emplacer, test_container_1, true, "baker");
+    test_emplacer(emplacer, test_container_1, true, "charlie");
+    test_emplacer(emplacer, test_container_1, true, "dog");
+    test_emplacer(emplacer, test_container_1, is_multi, "able");
+    test_emplacer(emplacer, test_container_1, is_multi, "fox");
+    test_emplacer(emplacer, test_container_1, is_multi, "easy");
+    test_emplacer(emplacer, test_container_1, is_multi, "baker");
+    test_emplacer(emplacer, test_container_1, is_multi, "charlie");
+    test_emplacer(emplacer, test_container_1, is_multi, "dog");
+
+    emplacer[test_container_2]
+        ("able")("fox")("easy")("baker")("charlie")("dog")
+        ("able")("fox")("easy")("baker")("charlie")("dog");
+
+    BOOST_CHECK(boost::range::equal(test_container_1, test_container_2));
+}
+
+template <typename T>
+void test_recursive_element(T const& t)
+{
+    BOOST_CHECK(
+        !strcmp(t.word.c_str(), "")
+     || !strcmp(t.word.c_str(), "sol")
+    );
+    BOOST_CHECK((t.number == 0) || (t.number == 42));
+    BOOST_CHECK((t.letter == '\0') || (t.letter == 'X'));
+
+    typedef typename T::next_level_t C;
+    typename C::const_iterator itr_end = t.next_level.end();
+
+    for (
+        typename C::const_iterator itr = t.next_level.begin();
+        itr != itr_end;
+        ++itr
+    )
+    {
+        BOOST_CHECK(itr->previous_level == &t);
+        test_recursive_element(*itr);
+    }
+}
+
+template <typename Emplacer, typename T>
+void test_emplacer_recursive(Emplacer const& emplacer, T& t)
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(t.next_level);
+
+    p.first->previous_level = &t;
+    BOOST_CHECK(p.second);
+    test_recursive_element(t);
+    BOOST_CHECK(!strcmp(p.first->word.c_str(), ""));
+    BOOST_CHECK(p.first->number == 0);
+    BOOST_CHECK(p.first->letter == '\0');
+    BOOST_CHECK(p.first->flag == false);
+    BOOST_CHECK(t.next_level.size() == old_size + 1);
+}
+
+template <typename Emplacer, typename T>
+void test_emplacer_recursive(Emplacer const& emplacer, T& t, char const* word)
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(t.next_level, word);
+
+    p.first->previous_level = &t;
+    BOOST_CHECK(p.second);
+    test_recursive_element(t);
+    BOOST_CHECK(!strcmp(p.first->word.c_str(), word));
+    BOOST_CHECK(p.first->number == 0);
+    BOOST_CHECK(p.first->letter == '\0');
+    BOOST_CHECK(p.first->flag == false);
+    BOOST_CHECK(t.next_level.size() == old_size + 1);
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , char const* word
+      , long n
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(t.next_level, word, n);
+
+    p.first->previous_level = &t;
+    BOOST_CHECK(p.second);
+    test_recursive_element(t);
+    BOOST_CHECK(!strcmp(p.first->word.c_str(), word));
+    BOOST_CHECK(p.first->number == n);
+    BOOST_CHECK(p.first->letter == '\0');
+    BOOST_CHECK(p.first->flag == false);
+    BOOST_CHECK(t.next_level.size() == old_size + 1);
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , char const* word
+      , long n
+      , char letter
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(
+        t.next_level
+      , word
+      , n
+      , letter
+    );
+
+    p.first->previous_level = &t;
+    BOOST_CHECK(p.second);
+    test_recursive_element(t);
+    BOOST_CHECK(!strcmp(p.first->word.c_str(), word));
+    BOOST_CHECK(p.first->number == n);
+    BOOST_CHECK(p.first->letter == letter);
+    BOOST_CHECK(p.first->flag == false);
+    BOOST_CHECK(t.next_level.size() == old_size + 1);
+}
+
+template <typename Emplacer, typename T>
+void
+    test_emplacer_recursive(
+        Emplacer const& emplacer
+      , T& t
+      , char const* word
+      , long n
+      , char letter
+      , bool b
+    )
+{
+    typedef typename T::next_level_t C;
+    typename C::size_type old_size = t.next_level.size();
+    std::pair<typename C::iterator,bool> p = emplacer(
+        t.next_level
+      , word
+      , n
+      , letter
+      , b
+    );
+
+    p.first->previous_level = &t;
+    BOOST_CHECK(p.second);
+    test_recursive_element(t);
+    BOOST_CHECK(!strcmp(p.first->word.c_str(), word));
+    BOOST_CHECK(p.first->number == n);
+    BOOST_CHECK(p.first->letter == letter);
+    BOOST_CHECK(p.first->flag == b);
+    BOOST_CHECK(t.next_level.size() == old_size + 1);
+}
+
+template <typename Selector>
+struct test_mri_element
+{
+    template <typename T>
+    T& operator()(T& t)
+    {
+        return t.next_level.back();
+    }
+};
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <>
+struct test_mri_element<boost::slistS>
+{
+    template <typename T>
+    T& operator()(T& t)
+    {
+        return t.next_level.front();
+    }
+};
+#endif
+
+template <typename Selector>
+void test_emplace_function_gen_recursive()
+{
+    test_recursive_data<Selector> top;
+    typename boost::emplace_function_gen<Selector>::type emplacer;
+
+    test_emplacer_recursive(emplacer, top);
+    test_emplacer_recursive(emplacer, top, "sol");
+    test_emplacer_recursive(
+        emplacer
+      , test_mri_element<Selector>()(top)
+      , "sol"
+      , 42
+    );
+    test_emplacer_recursive(
+        emplacer
+      , test_mri_element<Selector>()(top)
+      , "sol"
+      , 42
+      , 'X'
+    );
+    test_emplacer_recursive(emplacer, top, "sol", 42, 'X', true);
+}
+
+template <typename Pair1, typename Pair2>
+void test_emplace_results(Pair1 const& p1, Pair2 const& p2)
+{
+    BOOST_CHECK(p1.second == p2.second);
+
+    if (p1.second)
+    {
+        BOOST_CHECK(*p1.first == *p2.first);
+    }
+}
+
+template <typename Selector1, typename Selector2>
+void test_emplace_function_gens()
+{
+    typename boost::container_gen<Selector1,test_string>::type container_1;
+    typename boost::container_gen<Selector2,test_string>::type container_2;
+    typename boost::emplace_function_gen<Selector1>::type emplacer_1;
+    typename boost::emplace_function_gen<Selector2>::type emplacer_2;
+
+    test_emplace_results(
+        emplacer_1(container_1, "able")
+      , emplacer_2(container_2, "able")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "fox")
+      , emplacer_2(container_2, "fox")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "easy")
+      , emplacer_2(container_2, "easy")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "baker")
+      , emplacer_2(container_2, "baker")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "charlie")
+      , emplacer_2(container_2, "charlie")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "dog")
+      , emplacer_2(container_2, "dog")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "able")
+      , emplacer_2(container_2, "able")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "fox")
+      , emplacer_2(container_2, "fox")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "easy")
+      , emplacer_2(container_2, "easy")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "baker")
+      , emplacer_2(container_2, "baker")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "charlie")
+      , emplacer_2(container_2, "charlie")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+    test_emplace_results(
+        emplacer_1(container_1, "dog")
+      , emplacer_2(container_2, "dog")
+    );
+    BOOST_CHECK(boost::range::equal(container_1, container_2));
+}
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
+int test_main(int argc, char** argv)
+{
+    test_emplace_function_gen<boost::vecS>();
+    test_emplace_function_gen<boost::dequeS>();
+    test_emplace_function_gen<boost::listS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    test_emplace_function_gen<boost::slistS>();
+#endif
+    test_emplace_function_gen<boost::setS>();
+    test_emplace_function_gen<boost::mapS>();
+    test_emplace_function_gen<boost::multisetS>();
+    test_emplace_function_gen<boost::multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    test_emplace_function_gen<boost::hash_setS>();
+    test_emplace_function_gen<boost::hash_mapS>();
+    test_emplace_function_gen<boost::hash_multisetS>();
+    test_emplace_function_gen<boost::hash_multimapS>();
+#endif
+    test_emplace_function_gen<boost::ptr_vecS>();
+    test_emplace_function_gen<boost::ptr_dequeS>();
+    test_emplace_function_gen<boost::ptr_listS>();
+    test_emplace_function_gen<boost::ptr_setS>();
+    test_emplace_function_gen<boost::ptr_mapS>();
+    test_emplace_function_gen<boost::ptr_multisetS>();
+    test_emplace_function_gen<boost::ptr_multimapS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_emplace_function_gen<boost::ptr_hash_setS>();
+    test_emplace_function_gen<boost::ptr_hash_mapS>();
+    test_emplace_function_gen<boost::ptr_hash_multisetS>();
+    test_emplace_function_gen<boost::ptr_hash_multimapS>();
+    test_emplace_function_gen<boost::vector_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::stable_vecS>();
+    test_emplace_function_gen<boost::deque_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::list_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::set_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::map_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::multiset_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::multimap_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::hash_set_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<boost::hash_map_selector<boost::mpl::true_> >();
+    test_emplace_function_gen<
+        boost::hash_multiset_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gen<
+        boost::hash_multimap_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gen<boost::flat_setS>();
+    test_emplace_function_gen<boost::flat_mapS>();
+    test_emplace_function_gen<boost::flat_multisetS>();
+    test_emplace_function_gen<boost::flat_multimapS>();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    test_emplace_function_gen_recursive<boost::ptr_vecS>();
+    test_emplace_function_gen_recursive<boost::ptr_dequeS>();
+    test_emplace_function_gen_recursive<boost::ptr_listS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_emplace_function_gen_recursive<boost::stable_vecS>();
+    test_emplace_function_gen_recursive<
+        boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gen_recursive<
+        boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gen_recursive<
+        boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gen_recursive<boost::slistS>();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    test_emplace_function_gens<boost::vecS,boost::dequeS>();
+    test_emplace_function_gens<boost::vecS,boost::listS>();
+    test_emplace_function_gens<boost::vecS,boost::ptr_vecS>();
+    test_emplace_function_gens<boost::vecS,boost::ptr_dequeS>();
+    test_emplace_function_gens<boost::vecS,boost::ptr_listS>();
+    test_emplace_function_gens<boost::dequeS,boost::listS>();
+    test_emplace_function_gens<boost::dequeS,boost::ptr_vecS>();
+    test_emplace_function_gens<boost::dequeS,boost::ptr_dequeS>();
+    test_emplace_function_gens<boost::dequeS,boost::ptr_listS>();
+    test_emplace_function_gens<boost::listS,boost::ptr_vecS>();
+    test_emplace_function_gens<boost::listS,boost::ptr_dequeS>();
+    test_emplace_function_gens<boost::listS,boost::ptr_listS>();
+    test_emplace_function_gens<boost::ptr_vecS,boost::ptr_dequeS>();
+    test_emplace_function_gens<boost::ptr_vecS,boost::ptr_listS>();
+    test_emplace_function_gens<boost::ptr_dequeS,boost::ptr_listS>();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_emplace_function_gens<boost::vecS,boost::stable_vecS>();
+    test_emplace_function_gens<boost::dequeS,boost::stable_vecS>();
+    test_emplace_function_gens<boost::listS,boost::stable_vecS>();
+    test_emplace_function_gens<boost::ptr_vecS,boost::stable_vecS>();
+    test_emplace_function_gens<boost::ptr_dequeS,boost::stable_vecS>();
+    test_emplace_function_gens<
+        boost::vecS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::vecS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::vecS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::dequeS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::dequeS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::dequeS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::listS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::listS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::listS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_vecS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_vecS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_vecS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_dequeS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_dequeS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::ptr_dequeS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::stable_vecS
+      , boost::vector_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::stable_vecS
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::stable_vecS
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::vector_selector<boost::mpl::true_>
+      , boost::deque_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::vector_selector<boost::mpl::true_>
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::deque_selector<boost::mpl::true_>
+      , boost::list_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<boost::setS,boost::flat_setS>();
+    test_emplace_function_gens<boost::mapS,boost::flat_mapS>();
+    test_emplace_function_gens<boost::multisetS,boost::flat_multisetS>();
+    test_emplace_function_gens<boost::multimapS,boost::flat_multimapS>();
+    test_emplace_function_gens<
+        boost::setS
+      , boost::set_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::mapS
+      , boost::map_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::multisetS
+      , boost::multiset_selector<boost::mpl::true_>
+    >();
+    test_emplace_function_gens<
+        boost::multimapS
+      , boost::multimap_selector<boost::mpl::true_>
+    >();
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    return 0;
+}
+
Added: sandbox/container_gen/libs/container_gen/test/selectors.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/selectors.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1423 @@
+// 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>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_hashed_assoc_selector.hpp>
+#include <boost/container_gen/is_flat_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_recursive_selector.hpp>
+#include <boost/container_gen/is_tr1_selector.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+
+#if defined BOOST_MPL_CFG_NO_HAS_XXX || defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/std/vector.hpp>
+#include <boost/typeof/std/deque.hpp>
+#include <boost/typeof/std/list.hpp>
+#include <boost/typeof/std/set.hpp>
+#include <boost/typeof/std/map.hpp>
+#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>
+#include <boost/typeof/boost/ptr_container/ptr_set.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_map.hpp>
+
+#if !defined BOOST_MSVC
+#include <boost/typeof/std/tr1/array.hpp>
+#include <boost/typeof/boost/array.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_array.hpp>
+#endif
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/typeof/std/slist.hpp>
+#include <boost/typeof/std/hash_set.hpp>
+#include <boost/typeof/std/hash_map.hpp>
+#else
+#include <boost/typeof/std/tr1/unordered_set.hpp>
+#include <boost/typeof/std/tr1/unordered_map.hpp>
+#include <boost/typeof/boost/unordered/unordered_set.hpp>
+#include <boost/typeof/boost/unordered/unordered_map.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_unordered_map.hpp>
+#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>
+#include <boost/typeof/boost/container/set.hpp>
+#include <boost/typeof/boost/container/map.hpp>
+#include <boost/typeof/boost/container/flat_set.hpp>
+#include <boost/typeof/boost/container/flat_map.hpp>
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif  // BOOST_MPL_CFG_NO_HAS_XXX, BOOST_TYPEOF_EMULATION
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/test.hpp>
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::vecS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::dequeS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::listS>));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::slistS>));
+#endif
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::setS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::mapS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::multisetS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::multimapS>));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::hash_setS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::hash_mapS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::hash_multisetS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<boost::hash_multimapS>));
+#endif
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_vecS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_dequeS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_listS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_setS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_mapS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_multisetS>));
+    BOOST_MPL_ASSERT((boost::is_ptr_selector<boost::ptr_multimapS>));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT((
+        boost::is_ptr_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_ptr_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_ptr_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_ptr_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_random_access_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_associative_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<
+            boost::hash_multiset_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<
+            boost::hash_multimap_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_unique_associative_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<
+            boost::multiset_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<
+            boost::multimap_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<
+            boost::hash_set_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<
+            boost::hash_map_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<
+            boost::hash_multiset_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<
+            boost::hash_multimap_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_multiple_associative_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<
+            boost::hash_multiset_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_hashed_associative_selector<
+            boost::hash_multimap_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_flat_associative_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_flat_associative_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_flat_associative_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_flat_associative_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_flat_associative_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::multimapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_multimapS>
+    ));
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::slistS>
+    ));
+#endif
+#if defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<boost::hash_multimapS>
+    ));
+#endif
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::slistS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<boost::flat_multimapS>
+    ));
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::listS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::slistS>
+    ));
+#endif
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION || defined BOOST_HAS_HASH
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_multimapS>
+    ));
+#endif
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::ptr_multimapS>
+    ));
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<
+            boost::hash_multiset_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<
+            boost::hash_multimap_selector<true_>
+        >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::has_stable_iterators_selector<boost::flat_multimapS>
+    ));
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+MPL_TEST_CASE()
+{
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::slistS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_dequeS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_listS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_hash_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_hash_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_hash_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::ptr_hash_multimapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::vector_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::stable_vecS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::deque_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::list_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_tr1_selector<boost::hash_set_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_tr1_selector<boost::hash_map_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_tr1_selector<boost::hash_multiset_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_tr1_selector<boost::hash_multimap_selector<true_> >
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::flat_setS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::flat_mapS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::flat_multisetS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<boost::flat_multimapS>
+    ));
+}
+
+#endif  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined BOOST_MSVC
+// size_t ambiguity
+
+MPL_TEST_CASE()
+{
+    typedef boost::array_selector<int_<1> > exArrayS;
+    typedef boost::array_selector<int_<1>,true_> exTR1ArrayS;
+    typedef boost::ptr_array_selector<int_<1> > exPtrArrayS;
+
+    BOOST_MPL_ASSERT_NOT((boost::is_ptr_selector<exArrayS>));
+    BOOST_MPL_ASSERT((boost::is_random_access_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_associative_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_unique_associative_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_multiple_associative_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_hashed_associative_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_recursive_selector<exArrayS>));
+    BOOST_MPL_ASSERT_NOT((boost::is_tr1_selector<exArrayS>));
+    BOOST_MPL_ASSERT((boost::has_stable_iterators_selector<exArrayS>));
+
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_ptr_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_recursive_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_tr1_selector<exTR1ArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<exTR1ArrayS>
+    ));
+
+    BOOST_MPL_ASSERT((
+        boost::is_ptr_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_random_access_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_associative_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_unique_associative_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_multiple_associative_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_hashed_associative_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::is_recursive_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT_NOT((
+        boost::is_tr1_selector<exPtrArrayS>
+    ));
+    BOOST_MPL_ASSERT((
+        boost::has_stable_iterators_selector<exPtrArrayS>
+    ));
+}
+
+#endif  // BOOST_MSVC
+
Added: sandbox/container_gen/libs/container_gen/test/type_definitions.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/type_definitions.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,255 @@
+// 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_CONTAINER_GEN_TEST_TYPE_DEFINITIONS_HPP_INCLUDED
+#define LIBS_CONTAINER_GEN_TEST_TYPE_DEFINITIONS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/utility/get_iterator_second.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/is_recursive_selector.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <string>
+typedef std::string test_string;
+#else
+#include <boost/move/move.hpp>
+#include <boost/container/string.hpp>
+typedef boost::container::string test_string;
+#endif
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4521) // "multiple copy constructors specified"
+#endif
+
+template <typename Selector, typename Key = void>
+class test_recursive_data
+{
+    BOOST_MPL_ASSERT((boost::is_recursive_selector<Selector>));
+    typedef typename boost::mpl::if_<
+                std::tr1::is_void<Key>
+              , boost::mpl::false_
+              , boost::mpl::true_
+            >::type
+            _is_associative;
+
+ public:
+    typedef typename boost::mpl::eval_if<
+                _is_associative
+              , boost::container_gen<Selector,Key,test_recursive_data>
+              , boost::container_gen<Selector,test_recursive_data>
+            >::type
+            next_level_t;
+
+    test_recursive_data* previous_level;
+    next_level_t next_level;
+    test_string word;
+    long number;
+    char letter;
+    bool flag;
+
+    explicit test_recursive_data(
+        char const* str = ""
+      , long n = 0
+      , char c = '\0'
+      , bool b = false
+    ) : previous_level()
+      , next_level()
+      , word(str)
+      , number(n)
+      , letter(c)
+      , flag(b)
+    {
+    }
+
+    test_recursive_data(test_recursive_data const& copy)
+      : previous_level(copy.previous_level)
+      , next_level(copy.next_level)
+      , word(copy.word)
+      , number(copy.number)
+      , letter(copy.letter)
+      , flag(copy.flag)
+    {
+        _link_levels(_is_associative());
+    }
+
+    test_recursive_data(test_recursive_data& copy)
+      : previous_level(copy.previous_level)
+      , next_level(copy.next_level)
+      , word(copy.word)
+      , number(copy.number)
+      , letter(copy.letter)
+      , flag(copy.flag)
+    {
+        _link_levels(_is_associative());
+    }
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_recursive_data& operator=(test_recursive_data const& copy)
+    {
+        if (this != ©)
+        {
+            _copy_assign(copy);
+        }
+
+        return *this;
+    }
+
+    test_recursive_data& operator=(test_recursive_data& copy)
+    {
+        if (this != ©)
+        {
+            _copy_assign(const_cast<test_recursive_data const&>(copy));
+        }
+
+        return *this;
+    }
+
+ private:
+    void _copy_assign(test_recursive_data const& copy)
+    {
+        next_level = copy.next_level;
+        word = copy.word;
+        number = copy.number;
+        _link_levels(_is_associative());
+    }
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test_recursive_data(BOOST_RV_REF(test_recursive_data) source)
+      : previous_level(source.previous_level)
+      , next_level(boost::move(source.next_level))
+      , word(boost::move(source.word))
+      , number(source.number)
+      , letter(source.letter)
+      , flag(source.flag)
+    {
+        _link_levels(_is_associative());
+    }
+
+#if defined BOOST_NO_RVALUE_REFERENCES
+    operator boost::rv<test_recursive_data> const&() const
+    {
+        return *static_cast<boost::rv<test_recursive_data> const*>(this);
+    }
+
+    operator boost::rv<test_recursive_data>&()
+    {
+        return *static_cast<boost::rv<test_recursive_data>*>(this);
+    }
+
+    test_recursive_data&
+        operator=(boost::rv<test_recursive_data> const& ca_ref)
+    {
+        test_recursive_data const& copy = static_cast<
+            test_recursive_data const&
+        >(ca_ref);
+
+        if (this != ©)
+        {
+            _copy_assign(copy);
+        }
+
+        return *this;
+    }
+
+    test_recursive_data& operator=(boost::rv<test_recursive_data>& rv_ref)
+    {
+        if (this != &static_cast<test_recursive_data&>(rv_ref))
+        {
+            _move_assign(rv_ref);
+        }
+
+        return *this;
+    }
+
+    test_recursive_data& operator=(test_recursive_data& copy)
+    {
+        if (this != ©)
+        {
+            _copy_assign(const_cast<test_recursive_data const&>(copy));
+        }
+
+        return *this;
+    }
+#else  // !defined BOOST_NO_RVALUE_REFERENCES
+    test_recursive_data& operator=(test_recursive_data const& copy)
+    {
+        if (this != ©)
+        {
+            _copy_assign(copy);
+        }
+
+        return *this;
+    }
+
+    test_recursive_data& operator=(test_recursive_data&& source)
+    {
+        if (this != &static_cast<test_recursive_data&>(source))
+        {
+            _move_assign(static_cast<test_recursive_data&&>(source));
+        }
+
+        return *this;
+    }
+#endif  // BOOST_NO_RVALUE_REFERENCES
+
+ private:
+    void _copy_assign(BOOST_COPY_ASSIGN_REF(test_recursive_data) copy)
+    {
+        next_level = copy.next_level;
+        word = copy.word;
+        number = copy.number;
+        _link_levels(_is_associative());
+    }
+
+    void _move_assign(BOOST_RV_REF(test_recursive_data) source)
+    {
+        next_level = boost::move(source.next_level);
+        word = boost::move(source.word);
+        number = source.number;
+        _link_levels(_is_associative());
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    void _link_levels(boost::mpl::true_)
+    {
+        typename next_level_t::iterator itr_end = next_level.end();
+
+        for (
+            typename next_level_t::iterator itr = next_level.begin();
+            itr != itr_end;
+            ++itr
+        )
+        {
+            boost::get_iterator_second(itr).previous_level = this;
+        }
+    }
+
+    void _link_levels(boost::mpl::false_)
+    {
+        typename next_level_t::iterator itr_end = next_level.end();
+
+        for (
+            typename next_level_t::iterator itr = next_level.begin();
+            itr != itr_end;
+            ++itr
+        )
+        {
+            itr->previous_level = this;
+        }
+    }
+};
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
+#endif  // LIBS_CONTAINER_GEN_TEST_TYPE_DEFINITIONS_HPP_INCLUDED
+
Added: sandbox/container_gen/libs/graph/example/container_gen.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/graph/example/container_gen.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,55 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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/config.hpp>
+
+#if !defined BOOST_NO_STD_ALLOCATOR
+
+#include <boost/mpl/bool.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/properties.hpp>
+#include <memory>
+#include <iostream>
+
+//[example__container_gen__list_with_custom_allocator_selector
+struct int_allocator_selector
+{
+    template <typename T>
+    struct apply
+    {
+        typedef std::allocator<int> type;
+    };
+};
+
+int main(int, char*[])
+{
+    boost::adjacency_list<
+        boost::list_selector<boost::mpl::false_,int_allocator_selector>
+      , boost::dequeS
+      , boost::directedS
+    > g(5);
+
+    std::cout << boost::get(
+        boost::get(boost::vertex_index, g)
+      , boost::vertex(4, g)
+    ) << std::endl;
+
+    return 0;
+}
+//]
+
+#else
+
+int main(int, char*[])
+{
+    return 0;
+}
+
+#endif
+
Added: sandbox/container_gen/libs/graph/example/container_gen.expected
==============================================================================
Added: sandbox/container_gen/libs/utility/doc/html/get_iterator_second.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/html/get_iterator_second.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,120 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get_iterator_second</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="get_iterator_second.html" title="get_iterator_second">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav"></div>
+<div class="article">
+<div class="titlepage">
+<div>
+<div><h2 class="title">
+<a name="get_iterator_second"></a>get_iterator_second</h2></div>
+<div><p class="copyright">Copyright © 2012 Cromwell Enage</p></div>
+<div><div class="legalnotice">
+<a name="get_iterator_second.legal"></a><p>
+        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)
+      </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Function Synopsis</span></dt>
+<dt><span class="section">Function Description</span></dt>
+<dt><span class="section"><a href="get_iterator_second.html#get_iterator_second.rtmf_synopsis">Return Type Metafunction
+    Synopsis</a></span></dt>
+<dt><span class="section"><a href="get_iterator_second.html#get_iterator_second.rtmf_desc">Return Type Metafunction
+    Description</a></span></dt>
+<dt><span class="section">Where defined</span></dt>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_second.func_synopsis"></a><a class="link" href="get_iterator_second.html#get_iterator_second.func_synopsis" title="Function Synopsis">Function Synopsis</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
+    <span class="keyword">typename</span> <span class="identifier">get_iterator_second_result</span><span class="special"><</span><span class="identifier">Iterator</span><span class="special">>::</span><span class="identifier">type</span>
+        <span class="identifier">get_iterator_second</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">itr</span><span class="special">);</span>
+
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_second.func_desc"></a><a class="link" href="get_iterator_second.html#get_iterator_second.func_desc" title="Function Description">Function Description</a>
+</h2></div></div></div>
+<p>
+      Takes in an Iterator that points to a valid key-value pair
+      in an Associative Container or an associative Boost.PtrContainer;
+      returns a reference to the mapped value.
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_second.rtmf_synopsis"></a><a class="link" href="get_iterator_second.html#get_iterator_second.rtmf_synopsis" title="Return Type Metafunction Synopsis">Return Type Metafunction
+    Synopsis</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">get_iterator_second_result</span>
+    <span class="special">{</span>
+        <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_pointer</span><span class="special"><</span>
+                    <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unwrap_reference</span><span class="special"><</span>
+                        <span class="identifier">BOOST_TYPEOF_TPL</span><span class="special">(::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">Iterator</span><span class="special">()-></span><span class="identifier">second</span><span class="special">))</span>
+                    <span class="special">>::</span><span class="identifier">type</span>
+                <span class="special">>::</span><span class="identifier">type</span><span class="special">&</span>
+                <span class="identifier">type</span><span class="special">;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_second.rtmf_desc"></a><a class="link" href="get_iterator_second.html#get_iterator_second.rtmf_desc" title="Return Type Metafunction Description">Return Type Metafunction
+    Description</a>
+</h2></div></div></div>
+<p>
+      Takes in the iterator type of an Associative Container or an associative Boost.PtrContainer;
+      returns the mapped type.
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_second.definition"></a><a class="link" href="get_iterator_second.html#get_iterator_second.definition" title="Where defined">Where defined</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/utility/get_iterator_second.hpp<span class="special">></span>
+</pre>
+<p>
+    </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: August 24, 2012 at 22:39:48 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"></div>
+</body>
+</html>
Added: sandbox/container_gen/libs/utility/doc/html/get_iterator_value_second.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/html/get_iterator_value_second.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,115 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get_iterator_value_second</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="get_iterator_value_second.html" title="get_iterator_value_second">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav"></div>
+<div class="article">
+<div class="titlepage">
+<div>
+<div><h2 class="title">
+<a name="get_iterator_value_second"></a>get_iterator_value_second</h2></div>
+<div><p class="copyright">Copyright © 2012 Cromwell Enage</p></div>
+<div><div class="legalnotice">
+<a name="get_iterator_value_second.legal"></a><p>
+        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)
+      </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Function Synopsis</span></dt>
+<dt><span class="section">Function Description</span></dt>
+<dt><span class="section"><a href="get_iterator_value_second.html#get_iterator_value_second.rtmf_synopsis">Return Type Metafunction
+    Synopsis</a></span></dt>
+<dt><span class="section"><a href="get_iterator_value_second.html#get_iterator_value_second.rtmf_desc">Return Type Metafunction
+    Description</a></span></dt>
+<dt><span class="section">Where defined</span></dt>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_value_second.func_synopsis"></a><a class="link" href="get_iterator_value_second.html#get_iterator_value_second.func_synopsis" title="Function Synopsis">Function Synopsis</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IterValue</span><span class="special">></span>
+    <span class="keyword">typename</span> <span class="identifier">get_iterator_value_second_result</span><span class="special"><</span><span class="identifier">IterValue</span><span class="special">>::</span><span class="identifier">type</span>
+        <span class="identifier">get_iterator_value_second</span><span class="special">(</span><span class="identifier">IterValue</span><span class="special">&</span> <span class="identifier">value</span><span class="special">);</span>
+
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_value_second.func_desc"></a><a class="link" href="get_iterator_value_second.html#get_iterator_value_second.func_desc" title="Function Description">Function Description</a>
+</h2></div></div></div>
+<p>
+      Takes in a valid key-value pair in an Associative Container or an associative Boost.PtrContainer;
+      returns a reference to the mapped value.
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_value_second.rtmf_synopsis"></a><a class="link" href="get_iterator_value_second.html#get_iterator_value_second.rtmf_synopsis" title="Return Type Metafunction Synopsis">Return Type Metafunction
+    Synopsis</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IterValue</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">get_iterator_value_second_result</span>
+    <span class="special">{</span>
+        <span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+                <span class="identifier">type</span><span class="special">;</span>
+    <span class="special">};</span>
+<span class="special">}</span>  <span class="comment">// namespace boost</span>
+</pre>
+<p>
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_value_second.rtmf_desc"></a><a class="link" href="get_iterator_value_second.html#get_iterator_value_second.rtmf_desc" title="Return Type Metafunction Description">Return Type Metafunction
+    Description</a>
+</h2></div></div></div>
+<p>
+      Takes in the value type of an Associative Container or an associative Boost.PtrContainer;
+      returns the mapped type.
+    </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="get_iterator_value_second.definition"></a><a class="link" href="get_iterator_value_second.html#get_iterator_value_second.definition" title="Where defined">Where defined</a>
+</h2></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/utility/get_iterator_value_second.hpp<span class="special">></span>
+</pre>
+<p>
+    </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: August 24, 2012 at 22:39:37 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"></div>
+</body>
+</html>
Added: sandbox/container_gen/libs/utility/doc/src/get_iterator_second/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/src/get_iterator_second/Jamroot	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,65 @@
+project
+    : requirements
+        # Path for links to Boost:
+        # <xsl:param>boost.root=../../../..
+        <xsl:param>boost.root=http://www.boost.org
+
+        # Some general style settings:
+        <xsl:param>table.footnote.number.format=1
+        <xsl:param>footnote.number.format=1
+
+        # HTML options first:
+        # Use graphics not text for navigation:
+        <xsl:param>navig.graphics=1
+        # PDF Options:
+        # TOC Generation: this is needed for FOP-0.9 and later:
+        <xsl:param>fop1.extensions=0
+        <xsl:param>xep.extensions=1
+        # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+        <xsl:param>fop.extensions=0
+        # No indent on body text:
+        <xsl:param>body.start.indent=0pt
+        # Margin size:
+        <xsl:param>page.margin.inner=0.5in
+        # Margin size:
+        <xsl:param>page.margin.outer=0.5in
+        # Paper type = A4
+        <xsl:param>paper.type=A4
+        # Yes, we want graphics for admonishments:
+        <xsl:param>admon.graphics=1
+        # Set this one for PDF generation *only*:
+        # default pnd graphics are awful in PDF form,
+        # better use SVG's instead:
+        <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+        <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
+#        <format>pdf:<xsl:param>boost.url.prefix=../../../../../../libs/utility/doc/html
+        <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/utility/doc/html
+    ;
+
+import boostbook : boostbook ;
+using quickbook ;
+
+path-constant boost-images : http://www.boost.org/doc/src/images ;
+
+xml get_iterator_second : doc.qbk ;
+boostbook standalone
+    :
+        get_iterator_second
+    :
+        <xsl:param>base.dir=../../../html
+        <xsl:param>root.filename=get_iterator_second
+        <xsl:param>boost.libraries=http://www.boost.org/libs/libraries.htm
+        <xsl:param>boost.image.src=../../../../boost.png
+        <xsl:param>boost.image.alt="C++ Boost"
+        <xsl:param>boost.image.w=277
+        <xsl:param>boost.image.h=86
+#        <xsl:param>html.stylesheet=../../../../../../doc/src/boostbook.css
+        <xsl:param>html.stylesheet=http://www.boost.org/doc/libs/release/doc/src/boostbook.css
+        <xsl:param>nav.layout=none
+        <xsl:param>chunk.section.depth=0
+        <xsl:param>chunk.first.sections=0
+        <xsl:param>toc.section.depth=1
+        <xsl:param>toc.max.depth=1
+        <xsl:param>generate.section.toc.level=1
+    ;
+
Added: sandbox/container_gen/libs/utility/doc/src/get_iterator_second/doc.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/src/get_iterator_second/doc.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,68 @@
+[article get_iterator_second
+    [quickbook 1.5]
+    [copyright 2012 Cromwell Enage]
+    [license
+        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])
+    ]
+]
+
+
+[def __Iterator__ [@http://www.sgi.com/tech/stl/Iterator.html [*Iterator]]]
+[def __Associative_Container__ [@http://www.sgi.com/tech/stl/AssociativeContainer.html [*Associative Container]]]
+[def __Boost_Ptr_Container__ [@boost:libs/ptr_container/doc/index.html [*Boost.PtrContainer]]]
+[def __boost_utility_get_iterator_second_hpp__ [@../../../../boost/utility/get_iterator_second.hpp boost/utility/get_iterator_second.hpp]]
+
+[import ../../../../../boost/utility/get_iterator_second.hpp]
+
+
+[/======================================]
+[section:func_synopsis Function Synopsis]
+[/======================================]
+
+[reference__get_iterator_second]
+
+[endsect]
+
+
+[/=====================================]
+[section:func_desc Function Description]
+[/=====================================]
+
+Takes in an __Iterator__ that points to a valid key-value pair in an
+__Associative_Container__ or an associative __Boost_Ptr_Container__;
+returns a reference to the mapped value.
+
+[endsect]
+
+
+[/======================================================]
+[section:rtmf_synopsis Return Type Metafunction Synopsis]
+[/======================================================]
+
+[reference__get_iterator_second_result]
+
+[endsect]
+
+
+[/=====================================================]
+[section:rtmf_desc Return Type Metafunction Description]
+[/=====================================================]
+
+Takes in the iterator type of an __Associative_Container__ or an associative
+__Boost_Ptr_Container__; returns the mapped type.
+
+[endsect]
+
+
+[/===============================]
+[section:definition Where defined]
+[/===============================]
+
+``
+#include <__boost_utility_get_iterator_second_hpp__>
+``
+
+[endsect]
+
Added: sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/Jamroot	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,65 @@
+project
+    : requirements
+        # Path for links to Boost:
+        # <xsl:param>boost.root=../../../..
+        <xsl:param>boost.root=http://www.boost.org
+
+        # Some general style settings:
+        <xsl:param>table.footnote.number.format=1
+        <xsl:param>footnote.number.format=1
+
+        # HTML options first:
+        # Use graphics not text for navigation:
+        <xsl:param>navig.graphics=1
+        # PDF Options:
+        # TOC Generation: this is needed for FOP-0.9 and later:
+        <xsl:param>fop1.extensions=0
+        <xsl:param>xep.extensions=1
+        # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+        <xsl:param>fop.extensions=0
+        # No indent on body text:
+        <xsl:param>body.start.indent=0pt
+        # Margin size:
+        <xsl:param>page.margin.inner=0.5in
+        # Margin size:
+        <xsl:param>page.margin.outer=0.5in
+        # Paper type = A4
+        <xsl:param>paper.type=A4
+        # Yes, we want graphics for admonishments:
+        <xsl:param>admon.graphics=1
+        # Set this one for PDF generation *only*:
+        # default pnd graphics are awful in PDF form,
+        # better use SVG's instead:
+        <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+        <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
+#        <format>pdf:<xsl:param>boost.url.prefix=../../../../../../libs/utility/doc/html
+        <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/utility/doc/html
+    ;
+
+import boostbook : boostbook ;
+using quickbook ;
+
+path-constant boost-images : http://www.boost.org/doc/src/images ;
+
+xml get_iterator_value_second : doc.qbk ;
+boostbook standalone
+    :
+        get_iterator_value_second
+    :
+        <xsl:param>base.dir=../../../html
+        <xsl:param>root.filename=get_iterator_value_second
+        <xsl:param>boost.libraries=http://www.boost.org/libs/libraries.htm
+        <xsl:param>boost.image.src=../../../../boost.png
+        <xsl:param>boost.image.alt="C++ Boost"
+        <xsl:param>boost.image.w=277
+        <xsl:param>boost.image.h=86
+#        <xsl:param>html.stylesheet=../../../../../../doc/src/boostbook.css
+        <xsl:param>html.stylesheet=http://www.boost.org/doc/libs/release/doc/src/boostbook.css
+        <xsl:param>nav.layout=none
+        <xsl:param>chunk.section.depth=0
+        <xsl:param>chunk.first.sections=0
+        <xsl:param>toc.section.depth=1
+        <xsl:param>toc.max.depth=1
+        <xsl:param>generate.section.toc.level=1
+    ;
+
Added: sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/doc.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/utility/doc/src/get_iterator_value_second/doc.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,68 @@
+[article get_iterator_value_second
+    [quickbook 1.5]
+    [copyright 2012 Cromwell Enage]
+    [license
+        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])
+    ]
+]
+
+
+[def __Iterator__ [@http://www.sgi.com/tech/stl/Iterator.html [*Iterator]]]
+[def __Associative_Container__ [@http://www.sgi.com/tech/stl/AssociativeContainer.html [*Associative Container]]]
+[def __Boost_Ptr_Container__ [@boost:libs/ptr_container/doc/index.html [*Boost.PtrContainer]]]
+[def __boost_utility_get_iterator_value_second_hpp__ [@../../../../boost/utility/get_iterator_value_second.hpp boost/utility/get_iterator_value_second.hpp]]
+
+[import ../../../../../boost/utility/get_iterator_value_second.hpp]
+
+
+[/======================================]
+[section:func_synopsis Function Synopsis]
+[/======================================]
+
+[reference__get_iterator_value_second]
+
+[endsect]
+
+
+[/=====================================]
+[section:func_desc Function Description]
+[/=====================================]
+
+Takes in a valid key-value pair in an __Associative_Container__ or an
+associative __Boost_Ptr_Container__; returns a reference to the mapped
+value.
+
+[endsect]
+
+
+[/======================================================]
+[section:rtmf_synopsis Return Type Metafunction Synopsis]
+[/======================================================]
+
+[reference__get_iterator_value_second_result]
+
+[endsect]
+
+
+[/=====================================================]
+[section:rtmf_desc Return Type Metafunction Description]
+[/=====================================================]
+
+Takes in the value type of an __Associative_Container__ or an associative
+__Boost_Ptr_Container__; returns the mapped type.
+
+[endsect]
+
+
+[/===============================]
+[section:definition Where defined]
+[/===============================]
+
+``
+#include <__boost_utility_get_iterator_value_second_hpp__>
+``
+
+[endsect]
+
Added: sandbox/tree_node/LICENSE_1_0.txt
==============================================================================
--- (empty file)
+++ sandbox/tree_node/LICENSE_1_0.txt	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
Added: sandbox/tree_node/boost.png
==============================================================================
Binary file. No diff available.
Added: sandbox/tree_node/boost/detail/base_pointee.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/detail/base_pointee.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+// 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_DETAIL_BASE_POINTEE_HPP_INCLUDED
+#define BOOST_DETAIL_BASE_POINTEE_HPP_INCLUDED
+
+namespace boost { namespace detail {
+
+    template <typename Derived>
+    struct base_pointee
+    {
+        typedef Derived const* const_pointer;
+        typedef Derived* pointer;
+
+        const_pointer get_derived() const;
+
+        pointer get_derived();
+
+     protected:
+        ~base_pointee();
+    };
+
+    template <typename Derived>
+    inline typename base_pointee<Derived>::const_pointer
+        base_pointee<Derived>::get_derived() const
+    {
+        return static_cast<const_pointer>(this);
+    }
+
+    template <typename Derived>
+    inline typename base_pointee<Derived>::pointer
+        base_pointee<Derived>::get_derived()
+    {
+        return static_cast<pointer>(this);
+    }
+
+    template <typename Derived>
+    base_pointee<Derived>::~base_pointee()
+    {
+    }
+}}  // namespace boost::detail
+
+#endif  // BOOST_DETAIL_BASE_POINTEE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/detail/metafunction/container_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/detail/metafunction/container_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,35 @@
+// 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_DETAIL_METAFUNCTION_CONTAINER_ITERATOR_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_CONTAINER_ITERATOR_HPP_INCLUDED
+
+#include <boost/tr1/type_traits.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    template <typename T>
+    struct container_iterator
+    {
+     private:
+        typedef typename ::std::tr1::remove_const<T>::type
+                C;
+
+     public:
+        typedef typename ::boost::mpl::if_<
+                    ::std::tr1::is_const<T>
+                  , typename C::const_iterator
+                  , typename C::iterator
+                >::type
+                type;
+
+        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,container_iterator,(T))
+    };
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_CONTAINER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/detail/metafunction/has_first_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/detail/metafunction/has_first_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_FIRST_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_FIRST_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_first_type metafunction will determine whether or not
+    // the specified type has a nested 'first_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(first_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_FIRST_TYPE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/detail/metafunction/has_second_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/detail/metafunction/has_second_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DETAIL_METAFUNCTION_HAS_SECOND_TYPE_HPP_INCLUDED
+#define BOOST_DETAIL_METAFUNCTION_HAS_SECOND_TYPE_HPP_INCLUDED
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace detail { namespace metafunction {
+
+    // The has_second_argument_type metafunction will determine whether or not
+    // the specified type has a nested 'second_type' type definition.
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(second_type)
+}}}  // namespace boost::detail::metafunction
+
+#endif  // BOOST_DETAIL_METAFUNCTION_HAS_SECOND_TYPE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,32 @@
+// 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_HPP_INCLUDED
+#define BOOST_TREE_NODE_HPP_INCLUDED
+
+#include <boost/tree_node/traversal_state.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/base.hpp>
+#include <boost/tree_node/binary_node.hpp>
+#include <boost/tree_node/nary_node.hpp>
+#include <boost/tree_node/associative_node.hpp>
+#include <boost/tree_node/with_depth.hpp>
+#include <boost/tree_node/with_position.hpp>
+#include <boost/tree_node/with_red_black_flag.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/tree_node/algorithm/equal.hpp>
+#include <boost/tree_node/algorithm/lexicographical_comp_3way.hpp>
+#include <boost/tree_node/algorithm/lexicographical_compare.hpp>
+
+#endif  // BOOST_TREE_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/_detail/config_begin.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/_detail/config_begin.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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 BOOST_TREE_NODE_DETAIL_CONFIG_INCLUDED
+#define BOOST_TREE_NODE_DETAIL_CONFIG_INCLUDED
+#include <boost/config.hpp>
+#endif
+
+#if defined BOOST_MSVC
+    #pragma warning (push)
+    #pragma warning (disable : 4521)  // multiple copy constructors specified
+    #pragma warning (disable : 4996)  // fn called w/params that may be unsafe
+#endif
+
Added: sandbox/tree_node/boost/tree_node/_detail/config_end.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/_detail/config_end.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,8 @@
+// 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)
+#if defined BOOST_MSVC
+    #pragma warning (pop)
+#endif
+
Added: sandbox/tree_node/boost/tree_node/algorithm/dereference_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/algorithm/dereference_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,106 @@
+// 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_ALGORITHM_DEREFERENCE_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_ALGORITHM_DEREFERENCE_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/utility/get_iterator_second.hpp>
+#include <boost/detail/metafunction/has_first_type.hpp>
+#include <boost/detail/metafunction/has_second_type.hpp>
+
+namespace boost { namespace tree_node { namespace _detail {
+
+    template <typename Iterator>
+    class dereference_iterator_helper
+    {
+        typedef typename ::boost::iterator_value<Iterator>::type
+                _value_type;
+        typedef typename ::boost::mpl::and_<
+                    typename ::boost::detail::metafunction::has_first_type<
+                        _value_type
+                    >::type
+                  , typename ::boost::detail::metafunction::has_second_type<
+                        _value_type
+                    >::type
+                >::type
+                _is_associative;
+
+     public:
+        typedef Iterator
+                argument_type;
+        typedef typename ::boost::mpl::eval_if<
+                    _is_associative
+                  , ::boost::get_iterator_second_result<Iterator>
+                  , ::boost::iterator_reference<Iterator>
+                >::type
+                result_type;
+
+        result_type operator()(argument_type itr) const;
+
+     private:
+        static result_type _evaluate(Iterator itr, ::boost::mpl::true_);
+
+        static result_type _evaluate(Iterator itr, ::boost::mpl::false_);
+    };
+
+    template <typename Iterator>
+    inline typename dereference_iterator_helper<Iterator>::result_type
+        dereference_iterator_helper<Iterator>::operator()(
+            argument_type itr
+        ) const
+    {
+        return this->_evaluate(itr, _is_associative());
+    }
+
+    template <typename Iterator>
+    inline typename dereference_iterator_helper<Iterator>::result_type
+        dereference_iterator_helper<Iterator>::_evaluate(
+            Iterator itr
+          , ::boost::mpl::true_
+        )
+    {
+        return ::boost::get_iterator_second(itr);
+    }
+
+    template <typename Iterator>
+    inline typename dereference_iterator_helper<Iterator>::result_type
+        dereference_iterator_helper<Iterator>::_evaluate(
+            Iterator itr
+          , ::boost::mpl::false_
+        )
+    {
+        return *itr;
+    }
+}}}  // namespace boost::tree_node::_detail
+
+//[reference__dereference_iterator
+namespace boost { namespace tree_node {
+
+//<-
+#if 0
+//->
+    template <typename Iterator>
+    implementation_defined dereference_iterator(Iterator itr);
+//<-
+#endif
+//->
+
+    //<-
+    template <typename Iterator>
+    inline typename _detail::dereference_iterator_helper<Iterator>::result_type
+        dereference_iterator(Iterator itr)
+    {
+        return _detail::dereference_iterator_helper<Iterator>()(itr);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_ALGORITHM_DEREFERENCE_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/associative_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/associative_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,868 @@
+// 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/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_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 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__pointer
+        typedef typename tree_node_base<Derived>::pointer
+                pointer;
+        //]
+
+        //[reference__associative_node_base__const_pointer
+        typedef typename tree_node_base<Derived>::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__get_data__const
+        typename traits::data_type const& get_data() const;
+        //]
+
+        //[reference__associative_node_base__get_data
+        typename traits::data_type& get_data();
+        //]
+
+        //[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();
+    };
+
+    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.get_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();
+    }
+
+#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>::get_data() 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>::get_data()
+    {
+        return this->_data;
+    }
+
+    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();
+        }
+    }
+}}  // namespace boost::tree_node
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename Key
+      , typename Data
+      , typename Selector = ::boost::ptr_mapS
+    >
+    class 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;
+        //]
+
+     public:
+        //[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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,163 @@
+// 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>
+
+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;
+
+     protected:
+        ~tree_node_base();
+
+        //[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>
+    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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1013 @@
+// 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/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
+
+#include <boost/tree_node/_detail/config_begin.hpp>
+
+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__traits
+        struct traits
+        {
+            typedef T data_type;
+        };
+        //]
+
+        //[reference__binary_node_base__pointer
+        typedef typename tree_node_base<Derived>::pointer
+                pointer;
+        //]
+
+        //[reference__binary_node_base__const_pointer
+        typedef typename tree_node_base<Derived>::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__get_data__const
+        typename traits::data_type const& get_data() const;
+        //]
+
+        //[reference__binary_node_base__get_data
+        typename traits::data_type& get_data();
+        //]
+
+        //[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();
+    };
+
+    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();
+    }
+
+#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>::get_data() const
+    {
+        return this->_data;
+    }
+
+    template <typename Derived, typename T>
+    inline typename binary_node_base<Derived,T>::traits::data_type&
+        binary_node_base<Derived,T>::get_data()
+    {
+        return this->_data;
+    }
+
+    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;
+        this->_right_child = pivot->_left_child;
+        this->_right_child->_parent = 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;
+        this->_left_child = pivot->_right_child;
+        this->_left_child->_parent = 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();
+        }
+    }
+}}  // namespace boost::tree_node
+
+namespace boost { namespace tree_node {
+
+    template <typename T>
+    class 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;
+        //]
+
+     public:
+        //[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/breadth_first_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/breadth_first_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,277 @@
+// 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_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__breadth_first_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class breadth_first_descendant_iterator
+      : public ::boost::iterator_adaptor<
+            breadth_first_descendant_iterator<Node>
+        //, typename Node::iterator or typename Node::const_iterator
+            //<-
+          , typename ::boost::detail::metafunction::container_iterator<
+                Node
+            >::type
+            //->
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    breadth_first_descendant_iterator<Node>
+                  , child_iterator
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<child_iterator>        _queue;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        breadth_first_descendant_iterator();
+
+        explicit breadth_first_descendant_iterator(Node& node);
+
+        template <typename N>
+        breadth_first_descendant_iterator(
+            breadth_first_descendant_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+     private:
+        void _push_children(Node&);
+
+        void _pop();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                breadth_first_descendant_iterator<Node1> const& lhs
+              , breadth_first_descendant_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename N>
+    breadth_first_descendant_iterator<N>::breadth_first_descendant_iterator()
+      : super_t(), _queue(), _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    breadth_first_descendant_iterator<Node>::breadth_first_descendant_iterator(
+        Node& node
+    ) : super_t()
+      , _queue()
+      , _state(::boost::tree_node::breadth_first_traversal)
+    {
+        this->_push_children(node);
+        this->_pop();
+    }
+
+    template <typename Node>
+    template <typename N>
+    breadth_first_descendant_iterator<Node>::breadth_first_descendant_iterator(
+        breadth_first_descendant_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _queue(other._queue.begin(), other._queue.end())
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline breadth_first_descendant_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    inline void breadth_first_descendant_iterator<Node>::increment()
+    {
+        this->_push_children(
+            ::boost::tree_node::dereference_iterator(this->base())
+        );
+        this->_pop();
+    }
+
+    template <typename Node>
+    void breadth_first_descendant_iterator<Node>::_push_children(Node& node)
+    {
+        child_iterator itr_end = node.end();
+
+        for (child_iterator itr = node.begin(); itr != itr_end; ++itr)
+        {
+            this->_queue.push_back(itr);
+        }
+    }
+
+    template <typename Node>
+    inline void breadth_first_descendant_iterator<Node>::_pop()
+    {
+        if (this->_queue.empty())
+        {
+            this->_state = ::boost::tree_node::no_traversal;
+        }
+        else
+        {
+            this->base_reference() = this->_queue.front();
+            this->_queue.pop_front();
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_descendant_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            breadth_first_descendant_iterator<Node1> const& lhs
+          , breadth_first_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            breadth_first_descendant_iterator<Node1> const& lhs
+          , breadth_first_descendant_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_descendant_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            breadth_first_descendant_iterator<Node1> const& lhs
+          , breadth_first_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            breadth_first_descendant_iterator<Node1> const& lhs
+          , breadth_first_descendant_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_breadth_first_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    breadth_first_descendant_iterator<Node>
+        make_breadth_first_descendant_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline breadth_first_descendant_iterator<Node>
+        make_breadth_first_descendant_iterator(Node& node)
+    {
+        return breadth_first_descendant_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_iterate_descendants
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void breadth_first_iterate_descendants(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void breadth_first_iterate_descendants(Node& node, UnaryFunction function)
+    {
+        for (breadth_first_descendant_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/breadth_first_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/breadth_first_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,257 @@
+// 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_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__breadth_first_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class breadth_first_iterator
+      : public ::boost::iterator_adaptor<
+            breadth_first_iterator<Node>
+          , Node*
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef ::boost::iterator_adaptor<
+                    breadth_first_iterator<Node>
+                  , Node*
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<Node*>                 _queue;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        breadth_first_iterator();
+
+        explicit breadth_first_iterator(Node& node);
+
+        template <typename N>
+        breadth_first_iterator(
+            breadth_first_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+     private:
+        void _push_children(Node&);
+
+        void _pop();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                breadth_first_iterator<Node1> const& lhs
+              , breadth_first_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    breadth_first_iterator<Node>::breadth_first_iterator()
+      : super_t(), _queue(), _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    breadth_first_iterator<Node>::breadth_first_iterator(Node& node)
+      : super_t(&node)
+      , _queue()
+      , _state(::boost::tree_node::breadth_first_traversal)
+    {
+    }
+
+    template <typename Node>
+    template <typename N>
+    breadth_first_iterator<Node>::breadth_first_iterator(
+        breadth_first_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _queue(other._queue.begin(), other._queue.end())
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline breadth_first_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void breadth_first_iterator<Node>::increment()
+    {
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+
+        child_iterator itr_end = this->base()->end();
+
+        for (child_iterator itr = this->base()->begin(); itr != itr_end; ++itr)
+        {
+            this->_queue.push_back(
+                &::boost::tree_node::dereference_iterator(itr)
+            );
+        }
+
+        if (this->_queue.empty())
+        {
+            this->_state = ::boost::tree_node::no_traversal;
+        }
+        else
+        {
+            this->base_reference() = this->_queue.front();
+            this->_queue.pop_front();
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            breadth_first_iterator<Node1> const& lhs
+          , breadth_first_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            breadth_first_iterator<Node1> const& lhs
+          , breadth_first_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            breadth_first_iterator<Node1> const& lhs
+          , breadth_first_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            breadth_first_iterator<Node1> const& lhs
+          , breadth_first_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_breadth_first_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    breadth_first_iterator<Node> make_breadth_first_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline breadth_first_iterator<Node> make_breadth_first_iterator(Node& node)
+    {
+        return breadth_first_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__breadth_first_iterate
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void breadth_first_iterate(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void breadth_first_iterate(Node& node, UnaryFunction function)
+    {
+        for (breadth_first_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/depth_first_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/depth_first_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,325 @@
+// 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_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__depth_first_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class depth_first_descendant_iterator
+      : public ::boost::iterator_adaptor<
+            depth_first_descendant_iterator<Node>
+        //, typename Node::iterator or typename Node::const_iterator
+            //<-
+          , typename ::boost::detail::metafunction::container_iterator<
+                Node
+            >::type
+            //->
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    depth_first_descendant_iterator<Node>
+                  , child_iterator
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<Node*>                 _node_stack;
+        ::std::deque<child_iterator>        _itr_stack;
+        Node*                               _node_ptr;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        depth_first_descendant_iterator();
+
+        explicit depth_first_descendant_iterator(Node& node);
+
+        template <typename N>
+        depth_first_descendant_iterator(
+            depth_first_descendant_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                depth_first_descendant_iterator<Node1> const& lhs
+              , depth_first_descendant_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    depth_first_descendant_iterator<Node>::depth_first_descendant_iterator()
+      : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _node_ptr()
+      , _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    depth_first_descendant_iterator<Node>::depth_first_descendant_iterator(
+        Node& node
+    ) : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _node_ptr(&node)
+      , _state(::boost::tree_node::pre_order_traversal)
+    {
+        this->_itr_stack.push_back(node.begin());
+        this->increment();
+    }
+
+    template <typename Node>
+    template <typename N>
+    depth_first_descendant_iterator<Node>::depth_first_descendant_iterator(
+        depth_first_descendant_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _node_stack(other._node_stack.begin(), other._node_stack.end())
+      , _itr_stack(other._itr_stack.begin(), other._itr_stack.end())
+      , _node_ptr(other._node_ptr)
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline depth_first_descendant_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void depth_first_descendant_iterator<Node>::increment()
+    {
+        if (this->_state == ::boost::tree_node::post_order_traversal)
+        {
+            if (this->_node_stack.empty())
+            {
+                this->_state = ::boost::tree_node::no_traversal;
+                this->_itr_stack.clear();
+            }
+            else
+            {
+                this->_itr_stack.pop_back();
+                this->_node_ptr = this->_node_stack.back();
+                this->_node_stack.pop_back();
+
+                if (++this->base_reference() == this->_node_ptr->end())
+                {
+                    if (this->_node_stack.empty())
+                    {
+                        this->_itr_stack.clear();
+                        this->_state = ::boost::tree_node::no_traversal;
+                    }
+                    else
+                    {
+                        child_iterator itr = this->_itr_stack.back();
+
+                        this->_itr_stack.pop_back();
+
+                        if (!this->_itr_stack.empty())
+                        {
+                            this->base_reference() = this->_itr_stack.back();
+                        }
+
+                        this->_itr_stack.push_back(itr);
+                        this->_state = (
+                            ::boost::tree_node::post_order_traversal
+                        );
+                    }
+                }
+                else
+                {
+                    this->_itr_stack.pop_back();
+                    this->_node_stack.push_back(this->_node_ptr);
+                    this->_itr_stack.push_back(this->base());
+                    this->_node_ptr = &(
+                        ::boost::tree_node::dereference_iterator(this->base())
+                    );
+                    this->_state = ::boost::tree_node::pre_order_traversal;
+                    this->_itr_stack.push_back(this->_node_ptr->begin());
+                }
+            }
+        }
+        else
+        {
+            child_iterator& itr = this->_itr_stack.back();
+
+            if (itr == this->_node_ptr->end())
+            {
+                this->_state = (
+                    this->_node_stack.empty()
+                  ? ::boost::tree_node::no_traversal
+                  : ::boost::tree_node::post_order_traversal
+                );
+            }
+            else
+            {
+                this->_node_stack.push_back(this->_node_ptr);
+                this->_node_ptr = &::boost::tree_node::dereference_iterator(
+                    this->base_reference() = itr
+                );
+                this->_state = ::boost::tree_node::pre_order_traversal;
+                this->_itr_stack.push_back(this->_node_ptr->begin());
+            }
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_descendant_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            depth_first_descendant_iterator<Node1> const& lhs
+          , depth_first_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            depth_first_descendant_iterator<Node1> const& lhs
+          , depth_first_descendant_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_descendant_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            depth_first_descendant_iterator<Node1> const& lhs
+          , depth_first_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            depth_first_descendant_iterator<Node1> const& lhs
+          , depth_first_descendant_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_depth_first_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    depth_first_descendant_iterator<Node>
+        make_depth_first_descendant_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline depth_first_descendant_iterator<Node>
+        make_depth_first_descendant_iterator(Node& node)
+    {
+        return depth_first_descendant_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_iterate_descendants
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename BinaryFunction>
+    void depth_first_iterate_descendants(Node& node, BinaryFunction function);
+
+    //<-
+    template <typename Node, typename BinaryFunction>
+    void depth_first_iterate_descendants(Node& node, BinaryFunction function)
+    {
+        for (depth_first_descendant_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr, traversal_state(itr));
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/depth_first_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/depth_first_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,308 @@
+// 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_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__depth_first_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class depth_first_iterator
+      : public ::boost::iterator_adaptor<
+            depth_first_iterator<Node>
+          , Node*
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    depth_first_iterator<Node>
+                  , Node*
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<Node*>                 _node_stack;
+        ::std::deque<child_iterator>        _itr_stack;
+        child_iterator                      _current_itr;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        depth_first_iterator();
+
+        explicit depth_first_iterator(Node& node);
+
+        template <typename N>
+        depth_first_iterator(
+            depth_first_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                depth_first_iterator<Node1> const& lhs
+              , depth_first_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    depth_first_iterator<Node>::depth_first_iterator()
+      : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _current_itr()
+      , _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    depth_first_iterator<Node>::depth_first_iterator(Node& node)
+      : super_t(&node)
+      , _node_stack()
+      , _itr_stack()
+      , _current_itr()
+      , _state(::boost::tree_node::pre_order_traversal)
+    {
+        this->_itr_stack.push_back(node.begin());
+    }
+
+    template <typename Node>
+    template <typename N>
+    depth_first_iterator<Node>::depth_first_iterator(
+        depth_first_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _node_stack(other._node_stack.begin(), other._node_stack.end())
+      , _itr_stack(other._itr_stack.begin(), other._itr_stack.end())
+      , _current_itr(other._current_itr)
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline depth_first_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void depth_first_iterator<Node>::increment()
+    {
+        if (this->_state == ::boost::tree_node::post_order_traversal)
+        {
+            this->_itr_stack.pop_back();
+
+            if (this->_node_stack.empty())
+            {
+                this->_state = ::boost::tree_node::no_traversal;
+                this->_itr_stack.clear();
+            }
+            else
+            {
+                this->base_reference() = this->_node_stack.back();
+                this->_node_stack.pop_back();
+
+                if (++this->_current_itr == this->base()->end())
+                {
+                    child_iterator itr = this->_itr_stack.back();
+
+                    this->_itr_stack.pop_back();
+
+                    if (!this->_itr_stack.empty())
+                    {
+                        this->_current_itr = this->_itr_stack.back();
+                    }
+
+                    this->_itr_stack.push_back(itr);
+                    this->_state = ::boost::tree_node::post_order_traversal;
+                }
+                else
+                {
+                    this->_itr_stack.pop_back();
+                    this->_node_stack.push_back(this->base());
+                    this->_itr_stack.push_back(this->_current_itr);
+                    this->base_reference() = &(
+                        ::boost::tree_node::dereference_iterator(
+                            this->_current_itr
+                        )
+                    );
+                    this->_state = ::boost::tree_node::pre_order_traversal;
+                    this->_itr_stack.push_back(this->base()->begin());
+                }
+            }
+        }
+        else
+        {
+            child_iterator& itr = this->_itr_stack.back();
+
+            if (itr == this->base()->end())
+            {
+                this->_state = ::boost::tree_node::post_order_traversal;
+            }
+            else
+            {
+                this->_node_stack.push_back(this->base());
+                this->base_reference() = &(
+                    ::boost::tree_node::dereference_iterator(
+                        this->_current_itr = itr
+                    )
+                );
+                this->_state = ::boost::tree_node::pre_order_traversal;
+                this->_itr_stack.push_back(this->base()->begin());
+            }
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            depth_first_iterator<Node1> const& lhs
+          , depth_first_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            depth_first_iterator<Node1> const& lhs
+          , depth_first_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            depth_first_iterator<Node1> const& lhs
+          , depth_first_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            depth_first_iterator<Node1> const& lhs
+          , depth_first_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_depth_first_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    depth_first_iterator<Node> make_depth_first_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline depth_first_iterator<Node> make_depth_first_iterator(Node& node)
+    {
+        return depth_first_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__depth_first_iterate
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename BinaryFunction>
+    void depth_first_iterate(Node& node, BinaryFunction function);
+
+    //<-
+    template <typename Node, typename BinaryFunction>
+    void depth_first_iterate(Node& node, BinaryFunction function)
+    {
+        for (depth_first_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr, traversal_state(itr));
+        }
+    }
+    //->
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/in_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/in_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,349 @@
+// 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_IN_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_IN_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <iterator>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+
+//[reference__in_order_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class in_order_iterator
+      : public ::boost::iterator_adaptor<
+            in_order_iterator<Node>
+          , Node*
+          , ::boost::use_default
+          , ::boost::bidirectional_traversal_tag
+        >
+    {
+        //<-
+        typedef ::boost::iterator_adaptor<
+                    in_order_iterator<Node>
+                  , Node*
+                  , ::boost::use_default
+                  , ::boost::bidirectional_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        Node*                               _root_parent_ptr;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        in_order_iterator();
+
+        explicit in_order_iterator(Node& node, bool start_left = true);
+
+        template <typename N>
+        in_order_iterator(
+            in_order_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        void decrement();
+
+        template <typename N1, typename N2>
+        friend bool
+            operator==(
+                in_order_iterator<N1> const& lhs
+              , in_order_iterator<N2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    in_order_iterator<Node>::in_order_iterator()
+      : super_t(), _root_parent_ptr(), _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    in_order_iterator<Node>::in_order_iterator(Node& node, bool start_left)
+      : super_t(&node)
+      , _root_parent_ptr(node.get_parent_ptr())
+      , _state(::boost::tree_node::in_order_traversal)
+    {
+        if (start_left)
+        {
+            while (this->base()->get_left_child_ptr())
+            {
+                this->base_reference() = this->base()->get_left_child_ptr();
+            }
+        }
+        else
+        {
+            while (this->base()->get_right_child_ptr())
+            {
+                this->base_reference() = this->base()->get_right_child_ptr();
+            }
+        }
+    }
+
+    template <typename Node>
+    template <typename N>
+    in_order_iterator<Node>::in_order_iterator(
+        in_order_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _root_parent_ptr(other._root_parent_ptr)
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline in_order_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void in_order_iterator<Node>::increment()
+    {
+        Node* node_ptr = this->base()->get_right_child_ptr();
+
+        if (node_ptr)
+        {
+            while (node_ptr->get_left_child_ptr())
+            {
+                node_ptr = node_ptr->get_left_child_ptr();
+            }
+
+            this->base_reference() = node_ptr;
+            return;
+        }
+
+        node_ptr = this->base();
+
+        for (
+            Node* next_ptr = node_ptr->get_parent_ptr();
+            next_ptr != this->_root_parent_ptr;
+            next_ptr = next_ptr->get_parent_ptr()
+        )
+        {
+            if (node_ptr == next_ptr->get_left_child_ptr())
+            {
+                this->base_reference() = next_ptr;
+                return;
+            }
+
+            node_ptr = next_ptr;
+        }
+
+        this->base_reference() = this->_root_parent_ptr = 0;
+        this->_state = ::boost::tree_node::no_traversal;
+    }
+
+    template <typename Node>
+    void in_order_iterator<Node>::decrement()
+    {
+        Node* node_ptr = this->base()->get_left_child_ptr();
+
+        if (node_ptr)
+        {
+            while (node_ptr->get_right_child_ptr())
+            {
+                node_ptr = node_ptr->get_right_child_ptr();
+            }
+
+            this->base_reference() = node_ptr;
+            return;
+        }
+
+        node_ptr = this->base();
+
+        for (
+            Node* next_ptr = node_ptr->get_parent_ptr();
+            next_ptr != this->_root_parent_ptr;
+            next_ptr = next_ptr->get_parent_ptr()
+        )
+        {
+            if (node_ptr == next_ptr->get_right_child_ptr())
+            {
+                this->base_reference() = next_ptr;
+                return;
+            }
+
+            node_ptr = next_ptr;
+        }
+
+        this->base_reference() = this->_root_parent_ptr = 0;
+        this->_state = ::boost::tree_node::no_traversal;
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__in_order_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename N1, typename N2>
+    bool
+        operator==(
+            in_order_iterator<N1> const& lhs
+          , in_order_iterator<N2> const& rhs
+        );
+
+    //<-
+    template <typename N1, typename N2>
+    inline bool
+        operator==(
+            in_order_iterator<N1> const& lhs
+          , in_order_iterator<N2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__in_order_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename N1, typename N2>
+    bool
+        operator!=(
+            in_order_iterator<N1> const& lhs
+          , in_order_iterator<N2> const& rhs
+        );
+
+    //<-
+    template <typename N1, typename N2>
+    inline bool
+        operator!=(
+            in_order_iterator<N1> const& lhs
+          , in_order_iterator<N2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_in_order_forward_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    in_order_iterator<Node> make_in_order_forward_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline in_order_iterator<Node>
+        make_in_order_forward_iterator(Node& node)
+    {
+        return in_order_iterator<Node>(node, true);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_in_order_reverse_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    in_order_iterator<Node> make_in_order_reverse_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline in_order_iterator<Node>
+        make_in_order_reverse_iterator(Node& node)
+    {
+        return in_order_iterator<Node>(node, false);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__in_order_iterate_forward
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void in_order_iterate_forward(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void in_order_iterate_forward(Node& node, UnaryFunction function)
+    {
+        for (in_order_iterator<Node> itr(node, true); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__in_order_iterate_reverse
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void in_order_iterate_reverse(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void in_order_iterate_reverse(Node& node, UnaryFunction function)
+    {
+        for (in_order_iterator<Node> itr(node, false); itr; --itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_IN_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/nary_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/nary_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,647 @@
+// 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/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_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 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__traits
+        struct traits
+        {
+            typedef T data_type;
+        };
+        //]
+
+        //[reference__nary_node_base__pointer
+        typedef typename tree_node_base<Derived>::pointer
+                pointer;
+        //]
+
+        //[reference__nary_node_base__const_pointer
+        typedef typename tree_node_base<Derived>::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__get_data__const
+        typename traits::data_type const& get_data() const;
+        //]
+
+        //[reference__nary_node_base__get_data
+        typename traits::data_type& get_data();
+        //]
+
+        //[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();
+    };
+
+    template <typename Derived, typename T, typename Selector>
+    nary_node_base<Derived,T,Selector>::nary_node_base(Derived const& copy)
+      : _children(copy._children)
+      , _data(copy.get_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();
+    }
+
+#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>::get_data() 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>::get_data()
+    {
+        return this->_data;
+    }
+
+    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();
+        }
+    }
+}}  // namespace boost::tree_node
+
+namespace boost { namespace tree_node {
+
+    template <typename T, typename Selector = ::boost::ptr_dequeS>
+    class 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;
+        //]
+
+     public:
+        //[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/post_order_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/post_order_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,295 @@
+// 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_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__post_order_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class post_order_descendant_iterator
+      : public ::boost::iterator_adaptor<
+            post_order_descendant_iterator<Node>
+        //, typename Node::iterator or typename Node::const_iterator
+            //<-
+          , typename ::boost::detail::metafunction::container_iterator<
+                Node
+            >::type
+            //->
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    post_order_descendant_iterator<Node>
+                  , child_iterator
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        std::deque<child_iterator>          _stack;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        post_order_descendant_iterator();
+
+        explicit post_order_descendant_iterator(Node& node);
+
+        template <typename N>
+        post_order_descendant_iterator(
+            post_order_descendant_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                post_order_descendant_iterator<Node1> const& lhs
+              , post_order_descendant_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    post_order_descendant_iterator<Node>::post_order_descendant_iterator()
+      : super_t(), _stack(), _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    post_order_descendant_iterator<Node>::post_order_descendant_iterator(
+        Node& node
+    ) : super_t(), _stack(), _state(::boost::tree_node::post_order_traversal)
+    {
+        child_iterator itr = node.begin();
+        child_iterator itr_end = node.end();
+
+        if (itr != itr_end)
+        {
+            for (::std::deque<child_iterator> pre_order_stack;;)
+            {
+                while (itr != itr_end)
+                {
+                    pre_order_stack.push_back(itr);
+                    ++itr;
+                }
+
+                this->_stack.push_back(pre_order_stack.back());
+                pre_order_stack.pop_back();
+
+                if (pre_order_stack.empty())
+                {
+                    Node& n = ::boost::tree_node::dereference_iterator(
+                        this->base_reference() = this->_stack.back()
+                    );
+
+                    itr = n.begin();
+                    itr_end = n.end();
+
+                    if (itr == itr_end)
+                    {
+                        this->_stack.pop_back();
+                        break;
+                    }
+                }
+                else
+                {
+                    Node& n = ::boost::tree_node::dereference_iterator(
+                        this->_stack.back()
+                    );
+
+                    itr = n.begin();
+                    itr_end = n.end();
+                }
+            }
+        }
+
+        if (this->_stack.empty())
+        {
+            this->_state = ::boost::tree_node::no_traversal;
+        }
+    }
+
+    template <typename Node>
+    template <typename N>
+    post_order_descendant_iterator<Node>::post_order_descendant_iterator(
+        post_order_descendant_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _stack(other._stack.begin(), other._stack.end())
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline post_order_descendant_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    inline void post_order_descendant_iterator<Node>::increment()
+    {
+        if (this->_stack.empty())
+        {
+            this->_state = ::boost::tree_node::no_traversal;
+        }
+        else
+        {
+            this->base_reference() = this->_stack.back();
+            this->_stack.pop_back();
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_descendant_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            post_order_descendant_iterator<Node1> const& lhs
+          , post_order_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            post_order_descendant_iterator<Node1> const& lhs
+          , post_order_descendant_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_descendant_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            post_order_descendant_iterator<Node1> const& lhs
+          , post_order_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            post_order_descendant_iterator<Node1> const& lhs
+          , post_order_descendant_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_post_order_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    post_order_descendant_iterator<Node>
+        make_post_order_descendant_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline post_order_descendant_iterator<Node>
+        make_post_order_descendant_iterator(Node& node)
+    {
+        return post_order_descendant_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_iterate_descendants
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void post_order_iterate_descendants(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void post_order_iterate_descendants(Node& node, UnaryFunction function)
+    {
+        for (post_order_descendant_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/post_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/post_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,288 @@
+// 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_POST_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_POST_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__post_order_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class post_order_iterator
+      : public ::boost::iterator_adaptor<
+            post_order_iterator<Node>
+          , Node*
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef ::boost::iterator_adaptor<
+                    post_order_iterator<Node>
+                  , Node*
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        std::deque<Node*>                   _stack;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        post_order_iterator();
+
+        explicit post_order_iterator(Node& node);
+
+        template <typename N>
+        post_order_iterator(
+            post_order_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                post_order_iterator<Node1> const& lhs
+              , post_order_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    post_order_iterator<Node>::post_order_iterator()
+      : super_t(), _stack(), _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    post_order_iterator<Node>::post_order_iterator(Node& node)
+      : super_t(&node)
+      , _stack()
+      , _state(::boost::tree_node::post_order_traversal)
+    {
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+
+        child_iterator itr = node.begin(), itr_end = node.end();
+
+        if (itr != itr_end)
+        {
+            this->_stack.push_back(&node);
+
+            for (::std::deque<child_iterator> pre_order_stack;;)
+            {
+                while (itr != itr_end)
+                {
+                    pre_order_stack.push_back(itr);
+                    ++itr;
+                }
+
+                this->_stack.push_back(
+                    &::boost::tree_node::dereference_iterator(
+                        pre_order_stack.back()
+                    )
+                );
+                pre_order_stack.pop_back();
+
+                if (pre_order_stack.empty())
+                {
+                    Node* node_ptr = (
+                        this->base_reference() = this->_stack.back()
+                    );
+
+                    itr = node_ptr->begin();
+                    itr_end = node_ptr->end();
+
+                    if (itr == itr_end)
+                    {
+                        this->_stack.pop_back();
+                        break;
+                    }
+                }
+                else
+                {
+                    Node* node_ptr = this->_stack.back();
+
+                    itr = node_ptr->begin();
+                    itr_end = node_ptr->end();
+                }
+            }
+        }
+    }
+
+    template <typename Node>
+    template <typename N>
+    post_order_iterator<Node>::post_order_iterator(
+        post_order_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _stack(other._stack.begin(), other._stack.end())
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline post_order_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    inline void post_order_iterator<Node>::increment()
+    {
+        if (this->_stack.empty())
+        {
+            this->_state = ::boost::tree_node::no_traversal;
+        }
+        else
+        {
+            this->base_reference() = this->_stack.back();
+            this->_stack.pop_back();
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            post_order_iterator<Node1> const& lhs
+          , post_order_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            post_order_iterator<Node1> const& lhs
+          , post_order_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (lhs.base() == rhs.base()) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            post_order_iterator<Node1> const& lhs
+          , post_order_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            post_order_iterator<Node1> const& lhs
+          , post_order_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_post_order_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    post_order_iterator<Node> make_post_order_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline post_order_iterator<Node> make_post_order_iterator(Node& node)
+    {
+        return post_order_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__post_order_iterate
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void post_order_iterate(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void post_order_iterate(Node& node, UnaryFunction function)
+    {
+        for (post_order_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_POST_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/pre_order_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/pre_order_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,311 @@
+// 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_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__pre_order_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class pre_order_descendant_iterator
+      : public ::boost::iterator_adaptor<
+            pre_order_descendant_iterator<Node>
+        //, typename Node::iterator or typename Node::const_iterator
+            //<-
+          , typename ::boost::detail::metafunction::container_iterator<
+                Node
+            >::type
+            //->
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    pre_order_descendant_iterator<Node>
+                  , child_iterator
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<Node*>                 _node_stack;
+        ::std::deque<child_iterator>        _itr_stack;
+        Node*                               _current_node;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        pre_order_descendant_iterator();
+
+        explicit pre_order_descendant_iterator(Node& node);
+
+        template <typename N>
+        pre_order_descendant_iterator(
+            pre_order_descendant_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                pre_order_descendant_iterator<Node1> const& lhs
+              , pre_order_descendant_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    pre_order_descendant_iterator<Node>::pre_order_descendant_iterator()
+      : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _current_node()
+      , _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    pre_order_descendant_iterator<Node>::pre_order_descendant_iterator(
+        Node& node
+    ) : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _current_node(&node)
+      , _state(::boost::tree_node::pre_order_traversal)
+    {
+        this->_itr_stack.push_back(node.begin());
+        this->increment();
+    }
+
+    template <typename Node>
+    template <typename N>
+    pre_order_descendant_iterator<Node>::pre_order_descendant_iterator(
+        pre_order_descendant_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _node_stack(other._node_stack.begin(), other._node_stack.end())
+      , _itr_stack(other._itr_stack.begin(), other._itr_stack.end())
+      , _current_node(other._current_node)
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline pre_order_descendant_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void pre_order_descendant_iterator<Node>::increment()
+    {
+        if (this->_itr_stack.back() == this->_current_node->end())
+        {
+            bool is_post_order = true;
+
+            while (is_post_order)
+            {
+                this->_itr_stack.pop_back();
+
+                if (this->_node_stack.empty())
+                {
+                    this->_state = ::boost::tree_node::no_traversal;
+                    this->_itr_stack.clear();
+                    is_post_order = false;
+                }
+                else
+                {
+                    this->_current_node = this->_node_stack.back();
+                    this->_node_stack.pop_back();
+
+                    if (++this->base_reference() == this->_current_node->end())
+                    {
+                        child_iterator itr = this->_itr_stack.back();
+
+                        this->_itr_stack.pop_back();
+
+                        if (!this->_itr_stack.empty())
+                        {
+                            this->base_reference() = this->_itr_stack.back();
+                        }
+
+                        this->_itr_stack.push_back(itr);
+                    }
+                    else
+                    {
+                        this->_itr_stack.pop_back();
+                        this->_node_stack.push_back(this->_current_node);
+                        this->_itr_stack.push_back(this->base());
+                        this->_current_node = &(
+                            ::boost::tree_node::dereference_iterator(
+                                this->base()
+                            )
+                        );
+                        this->_itr_stack.push_back(
+                            this->_current_node->begin()
+                        );
+                        is_post_order = false;
+                    }
+                }
+            }
+        }
+        else
+        {
+            this->_node_stack.push_back(this->_current_node);
+            this->_current_node = &::boost::tree_node::dereference_iterator(
+                this->base_reference() = this->_itr_stack.back()
+            );
+            this->_itr_stack.push_back(this->_current_node->begin());
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_descendant_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            pre_order_descendant_iterator<Node1> const& lhs
+          , pre_order_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            pre_order_descendant_iterator<Node1> const& lhs
+          , pre_order_descendant_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (*lhs == *rhs) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_descendant_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            pre_order_descendant_iterator<Node1> const& lhs
+          , pre_order_descendant_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            pre_order_descendant_iterator<Node1> const& lhs
+          , pre_order_descendant_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_pre_order_descendant_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    pre_order_descendant_iterator<Node>
+        make_pre_order_descendant_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline pre_order_descendant_iterator<Node>
+        make_pre_order_descendant_iterator(Node& node)
+    {
+        return pre_order_descendant_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_iterate_descendants
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void pre_order_iterate_descendants(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void pre_order_iterate_descendants(Node& node, UnaryFunction function)
+    {
+        for (pre_order_descendant_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/pre_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/pre_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,300 @@
+// 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_PRE_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_PRE_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <deque>
+#include <boost/config.hpp>
+
+#if !defined BOOST_NO_SFINAE
+#include <boost/tr1/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#endif
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include <boost/detail/metafunction/container_iterator.hpp>
+
+//[reference__pre_order_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    class pre_order_iterator
+      : public ::boost::iterator_adaptor<
+            pre_order_iterator<Node>
+          , Node*
+          , ::boost::use_default
+          , ::boost::forward_traversal_tag
+        >
+    {
+        //<-
+        typedef typename ::boost::detail::metafunction::container_iterator<
+                    Node
+                >::type
+                child_iterator;
+        typedef ::boost::iterator_adaptor<
+                    pre_order_iterator<Node>
+                  , Node*
+                  , ::boost::use_default
+                  , ::boost::forward_traversal_tag
+                >
+                super_t;
+
+#if !defined BOOST_NO_SFINAE
+        struct enabler
+        {
+        };
+#endif
+
+     public:  // Should be private, but conversion ctor won't work.
+        ::std::deque<Node*>                 _node_stack;
+        ::std::deque<child_iterator>        _itr_stack;
+        child_iterator                      _current_itr;
+        ::boost::tree_node::traversal_state _state;
+        //->
+
+     public:
+        pre_order_iterator();
+
+        explicit pre_order_iterator(Node& node);
+
+        template <typename N>
+        pre_order_iterator(
+            pre_order_iterator<N> const& other
+//<-
+#if !defined BOOST_NO_SFINAE
+          , typename ::boost::enable_if<
+                ::std::tr1::is_convertible<N,Node>
+              , enabler
+            >::type = enabler()
+#endif
+//->
+        );
+
+        operator ::boost::tree_node::traversal_state() const;
+
+        //<-
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+     private:
+        friend class ::boost::iterator_core_access;
+#endif
+
+        void increment();
+
+        template <typename Node1, typename Node2>
+        friend bool
+            operator==(
+                pre_order_iterator<Node1> const& lhs
+              , pre_order_iterator<Node2> const& rhs
+            );
+        //->
+    };
+
+    //<-
+    template <typename Node>
+    pre_order_iterator<Node>::pre_order_iterator()
+      : super_t()
+      , _node_stack()
+      , _itr_stack()
+      , _current_itr()
+      , _state(::boost::tree_node::no_traversal)
+    {
+    }
+
+    template <typename Node>
+    pre_order_iterator<Node>::pre_order_iterator(Node& node)
+      : super_t(&node)
+      , _node_stack()
+      , _itr_stack()
+      , _current_itr()
+      , _state(::boost::tree_node::pre_order_traversal)
+    {
+        this->_itr_stack.push_back(node.begin());
+    }
+
+    template <typename Node>
+    template <typename N>
+    pre_order_iterator<Node>::pre_order_iterator(
+        pre_order_iterator<N> const& other
+#if !defined BOOST_NO_SFINAE
+      , typename ::boost::enable_if<
+            ::std::tr1::is_convertible<N,Node>
+          , enabler
+        >::type
+#endif
+    ) : super_t(other.base())
+      , _node_stack(other._node_stack.begin(), other._node_stack.end())
+      , _itr_stack(other._itr_stack.begin(), other._itr_stack.end())
+      , _current_itr(other._current_itr)
+      , _state(other._state)
+    {
+    }
+
+    template <typename Node>
+    inline pre_order_iterator<Node>::operator
+        ::boost::tree_node::traversal_state() const
+    {
+        return this->_state;
+    }
+
+    template <typename Node>
+    void pre_order_iterator<Node>::increment()
+    {
+        if (this->_itr_stack.back() == this->base()->end())
+        {
+            bool is_post_order = true;
+
+            while (is_post_order)
+            {
+                this->_itr_stack.pop_back();
+
+                if (this->_node_stack.empty())
+                {
+                    this->_state = ::boost::tree_node::no_traversal;
+                    this->_itr_stack.clear();
+                    is_post_order = false;
+                }
+                else
+                {
+                    this->base_reference() = this->_node_stack.back();
+                    this->_node_stack.pop_back();
+
+                    if (++this->_current_itr == this->base()->end())
+                    {
+                        child_iterator itr = this->_itr_stack.back();
+
+                        this->_itr_stack.pop_back();
+
+                        if (!this->_itr_stack.empty())
+                        {
+                            this->_current_itr = this->_itr_stack.back();
+                        }
+
+                        this->_itr_stack.push_back(itr);
+                    }
+                    else
+                    {
+                        this->_itr_stack.pop_back();
+                        this->_node_stack.push_back(this->base());
+                        this->_itr_stack.push_back(this->_current_itr);
+                        this->base_reference() = &(
+                            ::boost::tree_node::dereference_iterator(
+                                this->_current_itr
+                            )
+                        );
+                        this->_itr_stack.push_back(this->base()->begin());
+                        is_post_order = false;
+                    }
+                }
+            }
+        }
+        else
+        {
+            this->_node_stack.push_back(this->base());
+            this->base_reference() = &::boost::tree_node::dereference_iterator(
+                this->_current_itr = this->_itr_stack.back()
+            );
+            this->_itr_stack.push_back(this->base()->begin());
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_iterator__operator_equals
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator==(
+            pre_order_iterator<Node1> const& lhs
+          , pre_order_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator==(
+            pre_order_iterator<Node1> const& lhs
+          , pre_order_iterator<Node2> const& rhs
+        )
+    {
+        if (lhs._state == rhs._state)
+        {
+            return lhs._state ? (*lhs == *rhs) : !rhs._state;
+        }
+        else
+        {
+            return false;
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_iterator__operator_not_equal
+namespace boost { namespace tree_node {
+
+    template <typename Node1, typename Node2>
+    bool
+        operator!=(
+            pre_order_iterator<Node1> const& lhs
+          , pre_order_iterator<Node2> const& rhs
+        );
+
+    //<-
+    template <typename Node1, typename Node2>
+    inline bool
+        operator!=(
+            pre_order_iterator<Node1> const& lhs
+          , pre_order_iterator<Node2> const& rhs
+        )
+    {
+        return !(lhs == rhs);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__make_pre_order_iterator
+namespace boost { namespace tree_node {
+
+    template <typename Node>
+    pre_order_iterator<Node> make_pre_order_iterator(Node& node);
+
+    //<-
+    template <typename Node>
+    inline pre_order_iterator<Node> make_pre_order_iterator(Node& node)
+    {
+        return pre_order_iterator<Node>(node);
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+//[reference__pre_order_iterate
+namespace boost { namespace tree_node {
+
+    template <typename Node, typename UnaryFunction>
+    void pre_order_iterate(Node& node, UnaryFunction function);
+
+    //<-
+    template <typename Node, typename UnaryFunction>
+    void pre_order_iterate(Node& node, UnaryFunction function)
+    {
+        for (pre_order_iterator<Node> itr(node); itr; ++itr)
+        {
+            function(*itr);
+        }
+    }
+    //->
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_PRE_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/preprocessor.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/preprocessor.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,188 @@
+// 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>
+#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)          \
+        {                                                                    \
+        }                                                                    \
+//]
+#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/traversal_state.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/traversal_state.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,24 @@
+// 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_TRAVERSAL_STATE_HPP_INCLUDED
+#define BOOST_TREE_NODE_TRAVERSAL_STATE_HPP_INCLUDED
+
+//[reference__traversal_state
+namespace boost { namespace tree_node {
+
+    enum traversal_state
+    {
+        no_traversal
+      , pre_order_traversal
+      , post_order_traversal
+      , breadth_first_traversal
+      , in_order_traversal
+    };
+}}  // namespace boost::tree_node
+//]
+
+#endif  // BOOST_TREE_NODE_TRAVERSAL_STATE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/associative_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/associative_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_ASSOCIATIVE_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_ASSOCIATIVE_NODE_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_map.hpp>
+#include <boost/container_gen/selectors_typeof.hpp>
+#include <boost/tree_node/associative_node.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::associative_node_base, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::associative_node, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::associative_node, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::associative_node_gen, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::associative_node_default_gen)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_ASSOCIATIVE_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/binary_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/binary_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_BINARY_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_BINARY_NODE_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/binary_node.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::tree_node::_detail::binary_child_iterator
+  , 1
+)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::binary_node_base, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::binary_node, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::binary_node_gen)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_BINARY_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/breadth_first_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/breadth_first_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/breadth_first_desc_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::tree_node::breadth_first_descendant_iterator
+  , 1
+)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_BREADTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/breadth_first_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/breadth_first_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/breadth_first_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::breadth_first_iterator, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_BREADTH_FIRST_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/depth_first_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/depth_first_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/depth_first_desc_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::tree_node::depth_first_descendant_iterator
+  , 1
+)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_DEPTH_FIRST_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/depth_first_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/depth_first_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/depth_first_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::depth_first_iterator, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_DEPTH_FIRST_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/in_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/in_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_IN_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_IN_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/in_order_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::in_order_iterator, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_IN_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/nary_node.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/nary_node.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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_NARY_NODE_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_NARY_NODE_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/boost/ptr_container/ptr_deque.hpp>
+#include <boost/container_gen/selectors_typeof.hpp>
+#include <boost/tree_node/nary_node.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::nary_node_base, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::nary_node, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::nary_node, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::nary_node_gen, 1)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::nary_node_default_gen)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_NARY_NODE_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/post_order_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/post_order_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/post_order_desc_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::tree_node::post_order_descendant_iterator
+  , 1
+)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_POST_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/post_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/post_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_POST_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_POST_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/post_order_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::post_order_iterator, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_POST_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/pre_order_desc_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/pre_order_desc_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/pre_order_desc_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(
+    ::boost::tree_node::pre_order_descendant_iterator
+  , 1
+)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_PRE_ORDER_DESC_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/pre_order_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/pre_order_iterator.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_PRE_ORDER_ITERATOR_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_PRE_ORDER_ITERATOR_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/pre_order_iterator.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TEMPLATE(::boost::tree_node::pre_order_iterator, 1)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_PRE_ORDER_ITERATOR_HPP_INCLUDED
+
Added: sandbox/tree_node/boost/tree_node/typeof/traversal_state.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/typeof/traversal_state.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,16 @@
+// 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_TRAVERSAL_STATE_HPP_INCLUDED
+#define BOOST_TREE_NODE_TYPEOF_TRAVERSAL_STATE_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+#include <boost/tree_node/traversal_state.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+BOOST_TYPEOF_REGISTER_TYPE(::boost::tree_node::traversal_state)
+
+#endif  // BOOST_TREE_NODE_TYPEOF_TRAVERSAL_STATE_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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,21 @@
+// 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/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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,21 @@
+// 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/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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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/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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,19 @@
+// 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/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_count.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/boost/tree_node/with_count.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,588 @@
+// 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/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.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/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 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 with_count_base<Derived,BaseGenerator,T1,T2,Count>
+                self;
+
+     public:
+        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)                               \
+        {                                                                    \
+            ++_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();
+
+        void on_post_copy_or_move();
+
+#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
+
+        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__get_count
+        Count const& get_count() 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)
+    {
+        ++_count;
+    }
+#endif
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    with_count_base<Derived,BaseGenerator,T1,T2,Count>::~with_count_base()
+    {
+    }
+
+    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();
+    }
+
+#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
+    }
+
+    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);
+    }
+
+    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);
+    }
+
+    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);
+    }
+
+    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();
+
+        (--this->_count) -= p->get_right_child_ptr()->get_count();
+        (++p->_count) += this->get_left_child_ptr()->get_count();
+    }
+
+    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();
+
+        (--this->_count) -= p->get_left_child_ptr()->get_count();
+        (++p->_count) += this->get_right_child_ptr()->get_count();
+    }
+
+    template <
+        typename Derived
+      , typename BaseGenerator
+      , typename T1
+      , typename T2
+      , typename Count
+    >
+    inline Count const&
+        with_count_base<Derived,BaseGenerator,T1,T2,Count>::get_count() 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;
+        }
+        else if (this->_count < new_count)
+        {
+            self::_update_greater_count(
+                this->get_derived()
+              , new_count - this->_count
+            );
+            this->_count = new_count;
+        }
+    }
+
+    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
+            ).get_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
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2 = void
+      , typename Count = ::std::size_t
+    >
+    class 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;
+
+     public:
+        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)...)
+    {
+    }
+#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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,611 @@
+// 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/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/tree_node/preprocessor.hpp>
+#include <boost/tree_node/base.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/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 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 with_height_base<Derived,BaseGenerator,T1,T2,Height>
+                self;
+
+     public:
+        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();
+
+        void on_post_copy_or_move();
+
+#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
+
+        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__get_height
+        Height const& get_height() 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()
+    {
+    }
+
+    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();
+    }
+
+#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
+    }
+
+    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);
+    }
+
+    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());
+    }
+
+    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
+        >::get_height() 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());
+        }
+        else if (this->_height < new_height)
+        {
+            this->_height = new_height;
+            self::_update_greater_height(this->get_derived());
+        }
+    }
+
+    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
+            ).get_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->get_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->get_height();
+
+        while ((p = p->get_parent_ptr()) && (p->get_height() < ++p_height))
+        {
+            // This is the new deepest branch.
+            p->_height = p_height;
+        }
+    }
+}}  // namespace boost::tree_node
+
+namespace boost { namespace tree_node {
+
+    template <
+        typename BaseGenerator
+      , typename T1
+      , typename T2 = void
+      , typename Height = ::std::size_t
+    >
+    class 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;
+
+     public:
+        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)...)
+    {
+    }
+#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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,342 @@
+// 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>
+
+#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/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>;
+
+        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;
+
+     public:
+        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__get_position__const
+        const_iterator get_position() const;
+        //]
+
+        //[reference__with_position_base__get_position
+        iterator get_position();
+        //]
+
+     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());
+    }
+
+    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;
+    }
+
+    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());
+    }
+
+    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>::get_position() 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>::get_position()
+    {
+        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
+
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename T1, typename T2 = void>
+    class 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;
+
+     public:
+        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)...)
+    {
+    }
+#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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,364 @@
+// 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/preprocessor.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/tree_node/_detail/config_begin.hpp>
+
+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
+        //]
+    {
+        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;
+
+     public:
+        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
+
+     public:
+        //[reference__with_red_black_flag_base__is_red
+        bool is_red() const;
+        //]
+
+        //[reference__with_red_black_flag_base__is_black
+        bool is_black() const;
+        //]
+
+        //[reference__with_red_black_flag_base__set_red_flag
+        void set_red_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 bool
+        with_red_black_flag_base<Derived,BaseGenerator,T1,T2>::is_red() 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
+        >::is_black() 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;
+    }
+}}  // namespace boost::tree_node
+
+namespace boost { namespace tree_node {
+
+    template <typename BaseGenerator, typename T1, typename T2 = void>
+    class 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;
+
+     public:
+        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)...)
+    {
+    }
+#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/doc/Jamroot
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/Jamroot	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+project html ;
+import boostbook : boostbook ;
+using quickbook ;
+
+xml tree_node
+    :
+        tree_node.qbk
+    ;
+boostbook standalone
+    :
+        tree_node
+    :
+        <xsl:param>admon.graphics.path=http://www.boost.org/doc/libs/release/doc/src/images/
+        <xsl:param>navig.graphics.path=http://www.boost.org/doc/libs/release/doc/src/images/
+        <xsl:param>boost.root=http://www.boost.org
+        <xsl:param>boost.libraries=http://www.boost.org/libs/libraries.htm
+        <xsl:param>boost.image.src=../../../../boost.png
+        <xsl:param>boost.image.alt="C++ Boost"
+        <xsl:param>boost.image.w=277
+        <xsl:param>boost.image.h=86
+        <xsl:param>html.stylesheet=http://www.boost.org/doc/libs/release/doc/src/boostbook.css
+        <xsl:param>nav.layout=none
+        <xsl:param>chunk.section.depth=2
+        <xsl:param>chunk.first.sections=1
+        <xsl:param>generate.section.toc.level=0
+        <xsl:param>toc.section.depth=0
+        <xsl:param>toc.max.depth=0
+    ;
+
Added: sandbox/tree_node/libs/tree_node/doc/changelog.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/changelog.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,87 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Changelog]
+
+[heading From 0.3 to 0.4]
+
+  * Added __TREE_NODE_COPY_CONSTRUCTIBLE__, __TREE_NODE_COPYABLE_AND_MOVABLE__,
+    __TREE_NODE_EMPLACEMENT_CTOR_HEADER__,
+    __TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL__,
+    __TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD__,
+    __TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__, and
+    __TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF__ preprocessor macros.
+  * Added size type and emplacement constructor and size method expressions to
+    __Tree_Node__ concept.
+  * Added `on_post_*` and `on_post_*_impl` method expressions to
+    __Base_Tree_Node__ concept.
+  * Added iterator range and immutable iterator range types to
+    __Associative_Tree_Node__ concept.
+  * __Tree_Node__ models are now __Movable__.
+  * __Tree_Node__ models are no longer __Equality_Comparable__ or
+    __Less_Than_Comparable__.
+  * Added __tree_node_with_count__ adaptor class template, the corresponding
+    __Base_Tree_Node__ model __tree_node_with_count_base__, and the
+    corresponding __Type_Generator__ model __tree_node_with_count_gen__.
+  * Renamed `with_depth` to __tree_node_with_height__.
+  * Renamed `with_depth_base` to __tree_node_with_height_base__.
+  * Renamed `with_depth_gen` to __tree_node_with_height_gen__.
+  * Removed `tree_node_equal`, `tree_node_strictly_equal`,
+    `tree_node_lexicographical_compare`, and
+    `tree_node_strict_lexicographical_compare` algorithms.
+
+[heading From 0.2 to 0.3]
+
+  * Added __Associative_Tree_Node__, __Non_Associative_Tree_Node__,
+    __Binary_Tree_Node__, __N_ary_Tree_Node__, and __Type_Generator__ concepts.
+  * Added __binary_node__ data structure, the corresponding __Base_Tree_Node__
+    model __binary_node_base__, and the corresponding __Type_Generator__ model
+    __binary_node_gen__.
+  * Renamed `raw_node` to __nary_node__; added the corresponding
+    __Base_Tree_Node__ model __nary_node_base__ and the corresponding
+    __Type_Generator__ model __nary_node_gen__.
+  * Renamed `raw_associative_node` to __associative_node__; added the
+    corresponding __Base_Tree_Node__ model __associative_node_base__ and the
+    corresponding __Type_Generator__ model __associative_node_gen__.
+  * Added the __Base_Tree_Node__ model `with_depth_base` and the corresponding
+    __Type_Generator__ model `with_depth_gen`.
+  * Added __tree_node_with_position__ adaptor class template, the corresponding
+    __Base_Tree_Node__ model __tree_node_with_position_base__, and the
+    corresponding __Type_Generator__ model __tree_node_with_position_gen__.
+  * Added __tree_node_with_red_black_flag__ adaptor class template, the
+    corresponding __Base_Tree_Node__ model
+    __tree_node_with_red_black_flag_base__, and the corresponding
+    __Type_Generator__ model __tree_node_with_red_black_flag_gen__.
+  * Added __breadth_first_descendant_iterator__,
+    __pre_order_descendant_iterator__, __post_order_descendant_iterator__,
+    __in_order_iterator__, and __depth_first_descendant_iterator__ adaptor
+    class templates.
+  * Added __dereference_iterator__, `tree_node_equal`,
+    `tree_node_strictly_equal`, `tree_node_lexicographical_compare`, and
+    `tree_node_strict_lexicographical_compare` algorithms.
+  * Removed [*Factory-Constructible Tree Node] and [*Cloneable Tree Node]
+    concepts.
+  * Removed `tree_node_factory` facade.
+  * Removed `shared_tree_node_base` `struct` template.
+  * Removed `simple_node` and `simple_associative_node` data structures.
+  * Removed `with_child_range_access` adaptor class template; __Tree_Node__
+    concept now requires child range access for all models.
+
+[heading From 0.1 to 0.2]
+
+  * Added __Base_Tree_Node__, [*Factory-Constructible Tree Node], and
+    [*Cloneable Tree Node] concepts.
+  * Added `tree_node_factory` facade.
+  * Added __tree_node_base__ and `shared_tree_node_base` `struct` templates;
+    each __Tree_Node__ model that is not a __Base_Tree_Node__ now inherits from
+    a corresponding __Base_Tree_Node__ which, in turn, inherits from one of
+    these two types.
+  * Added `with_child_range_access` and `with_depth` adaptor class templates.
+
+[endsect] [/ Changelog]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_assoc_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_assoc_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,197 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:associative_tree_node Associative Tree Node]
+
+[section Description]
+Models of this concept provide key-based access to their child nodes.
+[endsect]
+
+[section Refinement of]
+__Tree_Node__
+[endsect]
+
+[variablelist Notation
+    [[`Node`][A type that models the [*Associative Tree Node] concept.]]
+    [[`node`][An object of type `Node::pointer`.]]
+    [[`const_node`][An object of type `Node::const_pointer`.]]
+    [[`key`][An object of type `Node::traits::key_type const&`.]]
+    [
+        [`args...`]
+        [
+            Arguments to be forwarded to the appropriate
+            `Node::traits::data_type` constructor.
+        ]
+    ]
+]
+
+[section:types Associated Types]
+Three new types are introduced.
+
+[table
+    [[Name][Expression][Description][Requirements]]
+    [
+        [Key type]
+        [`Node::traits::key_type`]
+        [The type of a key that a tree node will associate with a child node.]
+        []
+    ]
+    [
+        [Iterator range type]
+        [`Node::traits::iterator_range`]
+        [The type of a range of child nodes and their associated keys.]
+        [It must model a __Boost_Range__ concept.]
+    ]
+    [
+        [Immutable iterator range type]
+        [`Node::traits::const_iterator_range`]
+        [
+            The type of an immutable view of a range of child nodes and their
+            associated keys.
+        ]
+        [It must model a __Boost_Range__ concept.]
+    ]
+]
+
+In addition, the requirements for the iterator types are strengthened:
+
+  * The value type of `Node::iterator` must define a `first_type` type.
+  * The value type of `Node::iterator` must define a `first` member variable of
+    type `first_type`.
+  * Given an object `itr` of type `Node::iterator`, `itr->first` must be
+    convertible to `Node::traits::key_type const&`.
+  * The value type of `Node::iterator` must define a `second_type` type.
+  * The value type of `Node::iterator` must define a `second` member variable
+    of type `second_type`.
+  * Given an object `itr` of type `Node::iterator`,
+    [^_dereference_iterator_(itr)] must be convertible to `Node&`.
+  * The value type of `Node::const_iterator` must define a `first_type` type.
+  * The value type of `Node::const_iterator` must define a `first` member
+    variable of type `first_type`.
+  * Given an object `itr` of type `Node::const_iterator`, `itr->first` must be
+    convertible to `Node::traits::key_type const&`.
+  * The value type of `Node::const_iterator` must define a `second_type` type.
+  * The value type of `Node::const_iterator` must define a `second` member
+    variable of type `second_type`.
+  * Given an object `itr` of type `Node::const_iterator`,
+    [^_dereference_iterator_(itr)] must be convertible to `Node const&`.
+
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+In addition to the expressions defined in the __Tree_Node__ concept, the
+following expressions must be valid.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Type requirements]
+        [Return Type]
+        [Semantics]
+        [__Runtime_Complexity__]
+    ]
+    [
+        [Child creation]
+        [`node->emplace(key, args...);`]
+        []
+        [`Node::iterator`]
+        [
+            Creates and returns a tree node to be associated with the specified
+            key in the range of children of the invoking node.  The node
+            returned will initialize its data with the specified arguments.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Child copy creation]
+        [`node->insert(key, const_node)`]
+        [
+            The data type must model the __Copy_Constructible__ and __Movable__
+            concepts.
+        ]
+        [`Node::iterator`]
+        [
+            Creates and returns a deep copy of `const_node` to be associated
+            with the specified key in the range of children of the invoking
+            node.
+        ]
+        [Linear with respect to the number of descendants of `const_node`]
+    ]
+    [
+        [Child search]
+        [`const_node->find(key)`]
+        []
+        [`Node::const_iterator`]
+        [
+            Returns an iterator pointing to a child node associated with the
+            specified key, or `const_node->end()` if no such child exists.
+        ]
+        [Logarithmic]
+    ]
+    [
+        [Child search]
+        [`node->find(key)`]
+        []
+        [`Node::iterator`]
+        [
+            Returns an iterator pointing to a child node associated with the
+            specified key, or `node->end()` if no such child exists.
+        ]
+        [Logarithmic]
+    ]
+    [
+        [Child search range]
+        [`const_node->equal_range(key)`]
+        []
+        [`Node::traits::const_iterator_range`]
+        [
+            Returns a __Boost_Range__ of all child nodes associated with the
+            specified key.  The child nodes in the range returned cannot be
+            modified.  If no such children exist, then the range will be empty.
+        ]
+        [Logarithmic]
+    ]
+    [
+        [Child search range]
+        [`node->equal_range(key)`]
+        []
+        [`Node::traits::iterator_range`]
+        [
+            Returns a __Boost_Range__ of all child nodes associated with the
+            specified key.  The child nodes in the range returned can be
+            modified.  If no such children exist, then the range will be empty.
+        ]
+        [Logarithmic]
+    ]
+    [
+        [Remove children]
+        [`node->erase(key)`]
+        []
+        [`Node::size_type`]
+        [
+            Removes all child nodes associated with the specified key from the
+            tree node.  Returns the number of children removed.
+        ]
+        [
+            Linear with respect to the number of children and their descendants
+            in the range to be removed, plus logarithmic
+        ]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __associative_node__
+  * __associative_node_base__
+
+[endsect]
+
+[endsect] [/ Associative Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_base_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_base_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,232 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:base_tree_node Base Tree Node]
+
+[section Description]
+Models of this concept allow the __Tree_Node__ adaptor types to parameterically
+inherit their functionality for greater reuse.
+
+In practice, each [*Base Tree Node] model must do the following:
+
+  * Inherit from either __tree_node_base__ or the return type of a
+    __Type_Generator__.
+  * Take in the derived type and the data type as template parameters.
+  * Also take in the key type if the derived type is (possibly) an
+    __Associative_Tree_Node__ model.
+  * Declare a template instantiation of __tree_node_base__ with the derived
+    type as a `friend struct` if it overrides any of __tree_node_base__
+    implementation methods.
+
+[endsect]
+
+[section Refinement of]
+__Tree_Node__
+
+[endsect]
+
+[variablelist Notation
+    [[`Base`][A type that models the [*Base Tree Node] concept.]]
+    [[`base`][An object of type `Base*`.]]
+    [[`const_base`][An object of type `Base const*`.]]
+    [[`Node`][A __Tree_Node__ model that inherits from `Base`.]]
+    [[`copy`][An object of type `Node const&`.]]
+    [[`source`][An object of type `Node&&`.]]
+    [[`itr`][An object of type `Node::iterator`.]]
+    [[`BIC`][A type that models the __Boolean_Integral_Constant__ concept.]]
+    [[`bic`][An object of type `BIC`.]]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Tree_Node__ concept.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+In addition to the expressions defined in the __Tree_Node__ concept, the
+following expressions must be valid.
+
+[table
+    [[Name][Expression][Return Type][Semantics][__Runtime_Complexity__]]
+    [
+        [Derived access]
+        [`base->get_derived()`]
+        [`Node::pointer`]
+        [Returns a pointer to the same `Node` object.]
+        [Constant]
+    ]
+    [
+        [Derived access]
+        [`const_base->get_derived()`]
+        [`Node::const_pointer`]
+        [Returns a pointer to the same immutable `Node` object.]
+        [Constant]
+    ]
+]
+
+Also, the following expressions must be valid (unless the `Node` type does
+/not/ define the operation within which the expression can be invoked).
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Return Type]
+        [Semantics]
+        [Must be valid within]
+        [__Runtime_Complexity__]
+    ]
+    [
+        [Derived copy constructor]
+        [`Base(copy)`]
+        []
+        [Constructs a deep copy of the specified node.]
+        [The initializer list of the `Node` copy constructor.]
+        [Linear with respect to the number of descendants.]
+    ]
+    [
+        [Derived move constructor]
+        [`Base(source)`]
+        []
+        [Transfers the contents of the specified node to this one.]
+        [The initializer list of the `Node` move constructor.]
+        [Linear with respect to the number of children.]
+    ]
+    [
+        [Base copy assignment]
+        [`base->copy_assign(copy)`]
+        [`void`]
+        [
+            Structurally modifies the invoking node so that it is a deep copy
+            of the specified node.
+        ]
+        [The body of the `Node` copy assignment operator.]
+        [
+            Linear with respect to the number of children plus the number of
+            ancestors.
+        ]
+    ]
+    [
+        [Base move assignment]
+        [`base->move_assign(source)`]
+        [`void`]
+        [
+            Structurally modifies the invoking node so that it stores the
+            contents of the specified node.
+        ]
+        [The body of the `Node` move assignment operator.]
+        [
+            Linear with respect to the number of children plus the number of
+            ancestors.
+        ]
+    ]
+    [
+        [Copy or move notification]
+        [`base->on_post_copy_or_move()`]
+        [`void`]
+        [
+            Upholds any `Node`-specific invariants not upheld by either the
+            `Node` copy or move constructor's initializer lists or by the
+            base copy or move assignment method.  For example, if the `Base`
+            type defines `Node::pointer` member variables referring to a
+            parent and a number of child nodes, then this method and not the
+            derived copy or move constructors must link the children to their
+            parent via derived access because `Node` will be an incomplete type
+            during initialization.
+        ]
+        [
+            The body of the`Node` copy or move constructor or assignment
+            operator.
+        ]
+        [
+            Linear with respect to the number of children plus the number of
+            ancestors.
+        ]
+    ]
+    [
+        [Insertion notification]
+        [`base->on_post_inserted(itr, bic)`]
+        [`void`]
+        [
+            Updates any `Node`-specific information invalidated by operations
+            that insert or emplace the invoking node.  The specified iterator
+            points to this node.
+        ]
+        [The body of any `Node` insertion or emplacement member function.]
+        [
+            Amortized constant if `BIC::value == true`, linear with respect to
+            the number of siblings otherwise.
+        ]
+    ]
+    [
+        [Erasure notification]
+        [`base->on_post_erase()`]
+        [`void`]
+        [
+            Updates any `Node`-specific information invalidated by operations
+            that remove the specified children and their descendants from a
+            node.
+        ]
+        [The body of any `Node` erasure member function.]
+        [
+            Linear with respect to the number of children plus the number of
+            ancestors.
+        ]
+    ]
+    [
+        [Clear notification]
+        [`base->on_post_clear()`]
+        [`void`]
+        [
+            Updates any `Node`-specific information invalidated by operations
+            that remove all descendants from a node.
+        ]
+        [The body of the `Node::clear()` member function.]
+        [
+            Linear with respect to the number of children removed plus the
+            number of ancestors.
+        ]
+    ]
+    [
+        [Left rotation notification]
+        [`base->on_post_rotate_left()`]
+        [`void`]
+        [
+            Updates any `Node`-specific information invalidated by operations
+            that rotate a node to the left.
+        ]
+        [The body of the `Node::rotate_left()` member function.]
+        [Linear with respect to the number of ancestors.]
+    ]
+    [
+        [Right rotation notification]
+        [`base->on_post_rotate_right()`]
+        [`void`]
+        [
+            Updates any `Node`-specific information invalidated by operations
+            that rotate a node to the right.
+        ]
+        [The body of the `Node::rotate_right()` member function.]
+        [Linear with respect to the number of ancestors.]
+    ]
+]
+[endsect] [/ Valid Expressions and Semantics]
+
+[section Models]
+
+  * __binary_node_base__
+  * __nary_node_base__
+  * __associative_node_base__
+  * __tree_node_with_count_base__
+  * __tree_node_with_height_base__
+  * __tree_node_with_position_base__
+  * __tree_node_with_red_black_flag_base__
+
+[endsect]
+
+[endsect] [/ Base Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_binary_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_binary_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,208 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:binary_tree_node Binary Tree Node]
+
+[section Description]
+Models of this concept store at most two child nodes: left and right.  The
+operations that this concept defines include access to these children and
+rotations that use the appropriate child as a pivot node.
+[endsect]
+
+[section Refinement of]
+__Non_Associative_Tree_Node__
+[endsect]
+
+[variablelist Notation
+    [
+        [`Node`]
+        [A type that models the [*Binary Tree Node] concept.]
+    ]
+    [
+        [`node`]
+        [An object of type `Node::pointer`.]
+    ]
+    [
+        [`const_node`]
+        [An object of type `Node::const_pointer`.]
+    ]
+    [
+        [`args...`]
+        [
+            Arguments to be forwarded to the appropriate
+            `Node::traits::data_type` constructor.
+        ]
+    ]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Non_Associative_Tree_Node__
+concept.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+In addition to the expressions defined in the __Non_Associative_Tree_Node__
+concept, the following expressions must be valid.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Type requirements]
+        [Return Type]
+        [Semantics]
+        [__Runtime_Complexity__]
+    ]
+    [
+        [Left child creation]
+        [`node->emplace_left(args...)`]
+        []
+        [`Node::iterator`]
+        [
+            Creates and returns a tree node to be stored as the left child of
+            the invoking node.  The node returned will initialize its data with
+            the specified arguments.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Left child copy creation]
+        [`node->insert_left(const_node)`]
+        [
+            The data type must model the __Copy_Constructible__ and __Movable__
+            concepts.
+        ]
+        [`Node::iterator`]
+        [
+            Creates and returns a deep copy of `const_node` to be stored as the
+            left child of the invoking node.
+        ]
+        [Linear with respect to the number of descendants of `const_node`]
+    ]
+    [
+        [Right child creation]
+        [`node->emplace_right(args...)`]
+        []
+        [`Node::iterator`]
+        [
+            Creates and returns a tree node to be stored as the right child of
+            the invoking node.  The node returned will initialize its data with
+            the specified arguments.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Right child copy creation]
+        [`node->insert_right(const_node)`]
+        [
+            The data type must model the __Copy_Constructible__ and __Movable__
+            concepts.
+        ]
+        [`Node::iterator`]
+        [
+            Creates and returns a deep copy of `const_node` to be stored as the
+            right child of the invoking node.
+        ]
+        [Linear with respect to the number of descendants of `const_node`]
+    ]
+    [
+        [Left child access]
+        [`const_node->get_left_child_ptr()`]
+        []
+        [`Node::const_pointer`]
+        [
+            Returns the left child of the tree node, or a null pointer if no
+            such tree node exists.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Left child access]
+        [`node->get_left_child_ptr()`]
+        []
+        [`Node::pointer`]
+        [
+            Returns the left child of the tree node, or a null pointer if no
+            such tree node exists.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Right child access]
+        [`const_node->get_right_child_ptr()`]
+        []
+        [`Node::const_pointer`]
+        [
+            Returns the right child of the tree node, or a null pointer if no
+            such tree node exists.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Right child access]
+        [`node->get_right_child_ptr()`]
+        []
+        [`Node::pointer`]
+        [
+            Returns the right child of the tree node, or a null pointer if no
+            such tree node exists.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Rotate left]
+        [`node->rotate_left()`]
+        []
+        [`Node::pointer`]
+        [
+            Rotates the tree node in its hierarchy so that its right child, the
+            pivot node, becomes its parent.  The left child of the pivot node
+            becomes the right child of the tree node.  Returns the pivot node.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Rotate right]
+        [`node->rotate_right()`]
+        []
+        [`Node::pointer`]
+        [
+            Rotates the tree node in its hierarchy so that its left child, the
+            pivot node, becomes its parent.  The right child of the pivot node
+            becomes the left child of the tree node.  Returns the pivot node.
+        ]
+        [Amortized constant]
+    ]
+    [
+        [Remove left child]
+        [`node->erase_left()`]
+        []
+        [`void`]
+        [Removes the left child from the tree node.]
+        [Linear with respect to the number of descendants of the left child]
+    ]
+    [
+        [Remove right child]
+        [`node->erase_right()`]
+        []
+        [`void`]
+        [Removes the right child from the tree node.]
+        [Linear with respect to the number of descendants of the right child]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __binary_node__
+  * __binary_node_base__
+
+[endsect]
+
+[endsect] [/ Binary Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_descendant_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_descendant_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,85 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:tree_node_desc_iterator Tree Node Descendant Iterator]
+
+[section Description]
+This concept may seem redundant at first, especially when iterating through
+__Non_Associative_Tree_Node__ objects; however, for __Associative_Tree_Node__
+objects, models of this concept provide the sole means of accessing the key
+associated with each node being traversed.  (Root nodes are not associated with
+keys at the tree node level, so models of this concept do not traverse them.)
+[endsect]
+
+[section Refinement of]
+__Tree_Node_Iterator__
+[endsect]
+
+[variablelist Notation
+    [
+        [`Iterator`]
+        [A type that models the [*Tree Node Descendant Iterator] concept.]
+    ]
+    [
+        [`itr`]
+        [An object of type `Iterator`.]
+    ]
+    [
+        [`Node`]
+        [A type that models the __Tree_Node__ concept.]
+    ]
+    [
+        [`node`]
+        [An object of type `Node&`.]
+    ]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Tree_Node_Iterator__ concept;
+however, the requirements for the value type are strengthened: it must be the
+appropriate iterator type of `Node`.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+None beyond those defined in the __Tree_Node_Iterator__ concept; however, the
+type requirements for the constructors are strengthened, and their semantics
+are clarified.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Type requirements]
+        [Semantics]
+    ]
+    [
+        [Constructor from node]
+        [``
+            Iterator(node)
+            Iterator itr(node)
+        ``]
+        []
+        [
+            Constructs an iterator that will iterate through the descendants of
+            the specified node.
+        ]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __breadth_first_descendant_iterator__
+  * __pre_order_descendant_iterator__
+  * __post_order_descendant_iterator__
+  * __depth_first_descendant_iterator__
+
+[endsect]
+
+[endsect] [/ Tree Node Descendant Iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_full_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_full_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,71 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:full_tree_node_iterator Full Tree Node Iterator]
+
+[section Description]
+This concept specifies the requirement that models traverse the root node as
+well as its descendants.
+[endsect]
+
+[section Refinement of]
+__Tree_Node_Iterator__
+[endsect]
+
+[variablelist Notation
+    [[`Iterator`][A type that models the [*Full Tree Node Iterator] concept.]]
+    [[`itr`][An object of type `Iterator`.]]
+    [[`Node`][The value type of `Iterator`.]]
+    [[`node`][An object of type `Node&`.]]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Tree_Node_Iterator__ concept;
+however, the requirements for the value type are strengthened: it must model
+the __Tree_Node__ concept.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+None beyond those defined in the __Tree_Node_Iterator__ concept; however, the
+type requirements for the constructors are strengthened, and their semantics
+are clarified.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Type requirements]
+        [Semantics]
+    ]
+    [
+        [Constructor from node]
+        [``
+            Iterator(node)
+            Iterator itr(node)
+        ``]
+        []
+        [
+            Constructs an iterator that will iterate through the specified node
+            and its descendants.
+        ]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __breadth_first_iterator__
+  * __pre_order_iterator__
+  * __post_order_iterator__
+  * __in_order_iterator__
+  * __depth_first_iterator__
+
+[endsect]
+
+[endsect] [/ Full Tree Node Iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,103 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:tree_node_iterator Tree Node Iterator]
+
+[section Description]
+Tree-traversing iterators at the __Tree_Node__ level must be created
+differently from iterators at the __Container__ level.  Furthermore, tree node
+iterators typically store more stateful information than their __Container__
+counterparts; requiring two of them to check for dereferenceability may prove
+somewhat memory-inefficient.  This concept provides an alternate means of
+checking for dereferenceability that requires the use of only the active
+iterator.
+[endsect]
+
+[section Refinement of]
+__Forward_Iterator__
+[endsect]
+
+[variablelist Notation
+    [[`Iterator`][A type that models the [*Tree Node Iterator] concept.]]
+    [[`itr`][An object of type `Iterator`.]]
+    [[`Node`][A type that models the __Tree_Node__ concept.]]
+    [[`node`][An object of type `Node&`.]]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Forward_Iterator__ concept.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+In addition to the expressions defined in the __Forward_Iterator__ concept, the
+following expressions must be valid.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Return Type]
+        [Semantics]
+        [__Runtime_Complexity__]
+    ]
+    [
+        [Default constructor]
+        [``
+            Iterator()
+            Iterator itr
+        ``]
+        []
+        [Constructs a non-dereferenceable (past-the-end) iterator.]
+        [Constant]
+    ]
+    [
+        [Constructor from node]
+        [``
+            Iterator(node)
+            Iterator itr(node)
+        ``]
+        []
+        [Refinement-specific.]
+        [Amortized constant]
+    ]
+    [
+        [Dereferenceability]
+        [`itr`]
+        [A type that can be used in a boolean context.]
+        [
+            Returns a value convertible to `true` if `itr` is dereferenceable,
+            a value convertible to `false` if it is past-the-end.
+        ]
+        [Constant]
+    ]
+    [
+        [Node dereference]
+        [[^_dereference_iterator_(itr)]]
+        [`Node&` or `Node const&`, depending on the mutability of `itr`.]
+        [
+            Returns a reference to the __Tree_Node__ to which `itr` currently
+            points.
+        ]
+        [Constant]
+    ]
+]
+
+The __Forward_Iterator__ requirement that the increment operators must exhibit
+constant time complexity has been relaxed; they now need only exhibit linear
+time complexity with respect to the number of descendants in the worst case.
+[endsect]
+
+[section Models]
+
+  * All models of the __Full_Tree_Node_Iterator__ concept.
+  * All models of the __Tree_Node_Descendant_Iterator__ concept.
+
+[endsect]
+
+[endsect] [/ Tree Node Iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_nary_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_nary_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,97 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:nary_tree_node N-ary Tree Node]
+
+[section Description]
+Models of this concept store arbitrary numbers of children and provide simple
+child insertion expressions.
+[endsect]
+
+[section Refinement of]
+__Non_Associative_Tree_Node__
+[endsect]
+
+[variablelist Notation
+    [
+        [`Node`]
+        [A type that models the [*N-ary Tree Node] concept.]
+    ]
+    [
+        [`node`]
+        [An object of type `Node::pointer`.]
+    ]
+    [
+        [`const_node`]
+        [An object of type `Node::const_pointer`.]
+    ]
+    [
+        [`args...`]
+        [
+            Arguments to be forwarded to the appropriate
+            `Node::traits::data_type` constructor.
+        ]
+    ]
+]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Non_Associative_Tree_Node__
+concept.
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+In addition to the expressions defined in the __Non_Associative_Tree_Node__
+concept, the following expressions must be valid.
+
+[table
+    [
+        [Name]
+        [Expression]
+        [Type requirements]
+        [Return Type]
+        [Semantics]
+        [__Runtime_Complexity__]
+    ]
+    [
+        [Child creation]
+        [`node->emplace(args...)`]
+        []
+        [`Node::iterator`]
+        [
+            Creates and returns a tree node to be stored in the range of
+            children of the invoking node.  The node returned will initialize
+            its data with the specified arguments.
+        ]
+        [Logarithmic]
+    ]
+    [
+        [Child copy creation]
+        [`node->insert(const_node)`]
+        [
+            The data type must model the __Copy_Constructible__ and __Movable__
+            concepts.
+        ]
+        [`Node::iterator`]
+        [
+            Creates and returns a deep copy of `const_node` to be stored in the
+            range of children of the invoking node.
+        ]
+        [Linear with respect to the number of descendants of `const_node`]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __nary_node__
+  * __nary_node_base__
+
+[endsect]
+
+[endsect] [/ N-ary Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_non_assoc_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_non_assoc_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,43 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:non_assoc_tree_node Non-Associative Tree Node]
+
+[section Description]
+Models of this concept provide access to their child nodes via iterator
+dereferencing.
+[endsect]
+
+[section Refinement of]
+__Tree_Node__
+[endsect]
+
+[section:types Associated Types]
+No additional types beyond those defined in the __Tree_Node__ concept; however,
+the requirements for the child iterator types are strengthened:
+
+  * The value type of `Node::iterator` must be `Node&`.
+  * The value type of `Node::const_iterator` must be `Node const&`.
+
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+None beyond those defined in the __Tree_Node__ concept.
+[endsect]
+
+[section Models]
+
+  * __binary_node__
+  * __binary_node_base__
+  * __nary_node__
+  * __nary_node_base__
+
+[endsect]
+
+[endsect] [/ Non-Associative Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,235 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:tree_node Tree Node]
+
+[section Description]
+All tree node implementations that this library provides model this concept:
+a structure that maintains information about its data and its immediate
+parent-child relationships.  However, in practice, a full-fledged tree node
+data structure or adaptor consists of three components: a __Base_Tree_Node__
+model that defines the functionality, a [*Tree Node] model that inherits from
+the base type and is better suited for external usage, and a __Type_Generator__
+that returns the __Base_Tree_Node__ model from which adaptor types can also
+inherit.
+[endsect]
+
+[variablelist Notation
+    [[`Node`][A type that models the [*Tree Node] concept.]]
+    [[`node`][An object of type `Node::pointer`.]]
+    [[`const_node`][An object of type `Node::const_pointer`.]]
+    [
+        [`args...`]
+        [
+            Arguments to be forwarded to the appropriate
+            `Node::traits::data_type` constructor.
+        ]
+    ]
+]
+
+[section:types Associated Types]
+[table
+    [[Name][Expression][Description][Requirements]]
+    [
+        [Data type]
+        [`Node::traits::data_type`]
+        [The type of the object stored in a tree node.]
+        []
+    ]
+    [
+        [Pointer type]
+        [`Node::pointer`]
+        [The type of a pointer to a `Node` object.]
+        [
+            It must model the __Trivial_Iterator__ concept, it must point to
+            a mutable object, and it must be implicitly convertible to
+            `Node::const_pointer`.
+        ]
+    ]
+    [
+        [Pointer-to-const type]
+        [`Node::const_pointer`]
+        [The type of a pointer to a `Node const` object.]
+        [
+            It must model the __Trivial_Iterator__ concept, and it must /not/
+            point to a mutable object.
+        ]
+    ]
+    [
+        [Iterator type]
+        [`Node::iterator`]
+        [
+            The type of iterator used to iterate through the children of a
+            `Node` object.
+        ]
+        [
+            It must model the __Input_Iterator__ concept, and it must be
+            convertible to `Node::const_iterator`.
+        ]
+    ]
+    [
+        [Immutable iterator type]
+        [`Node::const_iterator`]
+        [
+            The type of iterator used to iterate through the children of a
+            `Node const` object.
+        ]
+        [
+            It must model the __Input_Iterator__ concept, and it must /not/
+            point to a mutable object.
+        ]
+    ]
+    [
+        [Size type]
+        [`Node::size_type`]
+        [
+            The type of unsigned integer used to represent the number of
+            children of a `Node const` object.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:expressions Valid Expressions and Semantics]
+[table
+    [[Name][Expression][Return Type][Semantics][__Runtime_Complexity__]]
+    [
+        [Emplacement constructor]
+        [`Node(args...)`]
+        []
+        [
+            Constructs a `Node` object that initializes its data with the
+            specified arguments.
+        ]
+        []
+    ]
+    [
+        [Data access]
+        [`const_node->get_data()`]
+        [`Node::traits::data_type const&`]
+        [Returns the object stored in the tree node.]
+        [Constant]
+    ]
+    [
+        [Data access]
+        [`node->get_data()`]
+        [`Node::traits::data_type&`]
+        [Returns the object stored in the tree node.]
+        [Constant]
+    ]
+    [
+        [Parent access]
+        [`const_node->get_parent_ptr()`]
+        [`Node::const_pointer`]
+        [
+            Returns a pointer to the parent of the tree node, or a null pointer
+            if the node is the root.
+        ]
+        [Constant]
+    ]
+    [
+        [Parent access]
+        [`node->get_parent_ptr()`]
+        [`Node::pointer`]
+        [
+            Returns a pointer to the parent of the tree node, or a null pointer
+            if the node is the root.
+        ]
+        [Constant]
+    ]
+    [
+        [Children range begin access]
+        [`const_node->begin()`]
+        [`Node::const_iterator`]
+        [
+            Returns an iterator pointing to the beginning of the range of
+            children of the tree node.  If the range is empty, then the
+            iterator points past-the-end.
+        ]
+        [Constant]
+    ]
+    [
+        [Children range begin access]
+        [`node->begin()`]
+        [`Node::iterator`]
+        [
+            Returns an iterator pointing to the beginning of the range of
+            children of the tree node.  If the range is empty, then the
+            iterator points past-the-end.
+        ]
+        [Constant]
+    ]
+    [
+        [Children range past-the-end access]
+        [`const_node->end()`]
+        [`Node::const_iterator`]
+        [
+            Returns an iterator pointing past the end of the range of children
+            of the tree node.
+        ]
+        [Constant]
+    ]
+    [
+        [Children range past-the-end access]
+        [`node->end()`]
+        [`Node::iterator`]
+        [
+            Returns an iterator pointing past the end of the range of children
+            of the tree node.
+        ]
+        [Constant]
+    ]
+    [
+        [Children range size query]
+        [`const_node->size()`]
+        [`Node::size_type`]
+        [Returns the number of children of the tree node.]
+        [Linear with respect to the number of children]
+    ]
+    [
+        [Leaf node query]
+        [`const_node->empty()`]
+        [`bool`]
+        [
+            Equivalent to `const_node->begin() == const_node->end()`, but may
+            be more efficient in certain cases.
+        ]
+        [Linear with respect to the number of children]
+    ]
+    [
+        [Remove all children]
+        [`node->clear()`]
+        [`void`]
+        [Removes all children from the tree node.]
+        [Linear with respect to the number of children and their descendants]
+    ]
+]
+[endsect] [/ Valid Expressions and Semantics]
+
+[section Models]
+
+  * __binary_node__
+  * __binary_node_base__
+  * __nary_node__
+  * __nary_node_base__
+  * __associative_node__
+  * __associative_node_base__
+  * __tree_node_with_count__
+  * __tree_node_with_count_base__
+  * __tree_node_with_height__
+  * __tree_node_with_height_base__
+  * __tree_node_with_position__
+  * __tree_node_with_position_base__
+  * __tree_node_with_red_black_flag__
+  * __tree_node_with_red_black_flag_base__
+
+[endsect]
+
+[endsect] [/ Tree Node]
+
Added: sandbox/tree_node/libs/tree_node/doc/concept_type_generator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concept_type_generator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,74 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:type_generator Type Generator]
+
+[section Description]
+A [*Type Generator] is a __Metafunction_Class__ that returns a
+__Base_Tree_Node__ from which __Tree_Node__ adaptor types can inherit the
+necessary functionality.
+[endsect]
+
+[variablelist Notation
+    [
+        [`Generator`]
+        [A type that models the [*Type Generator] concept.]
+    ]
+    [
+        [`Derived`]
+        [
+            The most descendant type that will inherit from the return type of
+            `Generator`.
+        ]
+    ]
+    [
+        [`Key`]
+        [The key type of the __Associative_Tree_Node__ to be returned.]
+    ]
+    [
+        [`Data`]
+        [The data type of the __Tree_Node__ to be returned.]
+    ]
+]
+
+[section:expressions Valid Expressions and Semantics]
+[table
+    [[Name][Expression][Return Type]]
+    [
+        [Non-associative invocation]
+        [[^_mpl_apply_wrap2_<Generator,Derived,Data>::type]]
+        [
+            A __Non_Associative_Tree_Node__ model whose `traits::data_type` is
+            the same as `Data`.
+        ]
+    ]
+    [
+        [Associative invocation]
+        [[^_mpl_apply_wrap3_<Generator,Derived,Key,Data>::type]]
+        [
+            An __Associative_Tree_Node__ model whose `traits::key_type` is the
+            same as `Key` and whose `traits::data_type` is the same as `Data`.
+        ]
+    ]
+]
+[endsect]
+
+[section Models]
+
+  * __binary_node_gen__
+  * __nary_node_gen__
+  * __associative_node_gen__
+  * __tree_node_with_count_gen__
+  * __tree_node_with_height_gen__
+  * __tree_node_with_position_gen__
+  * __tree_node_with_red_black_flag_gen__
+
+[endsect]
+
+[endsect] [/ Type Generator]
+
Added: sandbox/tree_node/libs/tree_node/doc/concepts.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/concepts.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,36 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Concepts]
+
+[include concept_tree_node.qbk]
+[include concept_base_tree_node.qbk]
+[include concept_assoc_tree_node.qbk]
+[include concept_non_assoc_tree_node.qbk]
+[include concept_binary_tree_node.qbk]
+[include concept_nary_tree_node.qbk]
+[include concept_type_generator.qbk]
+[include concept_iterator.qbk]
+[include concept_full_iterator.qbk]
+[include concept_descendant_iterator.qbk]
+
+[heading Core Concepts]
+
+  * __Tree_Node__
+      * __Base_Tree_Node__
+      * __Associative_Tree_Node__
+      * __Non_Associative_Tree_Node__
+          * __Binary_Tree_Node__
+          * __N_ary_Tree_Node__
+  * __Type_Generator__
+  * __Tree_Node_Iterator__
+      * __Full_Tree_Node_Iterator__
+      * __Tree_Node_Descendant_Iterator__
+
+[endsect] [/ Concepts]
+
Added: sandbox/tree_node/libs/tree_node/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/index.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,70 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Chapter 1. tree_node 0.4</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="index.html" title="Chapter 1. tree_node 0.4">
+<link rel="next" href="tree_node/concepts.html" title="Concepts">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="tree_node/concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+<div class="chapter">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="tree_node"></a>Chapter 1. tree_node 0.4</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Cromwell D.</span> <span class="surname">Enage</span>
+</h3></div></div>
+<div><p class="copyright">Copyright © 2011, 2012 Cromwell D. Enage</p></div>
+<div><div class="legalnotice">
+<a name="tree_node.legal"></a><p>
+        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)
+      </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Concepts</span></dt>
+<dt><span class="section">Reference</span></dt>
+<dt><span class="section">Changelog</span></dt>
+</dl>
+</div>
+<h3>
+<a name="tree_node.h0"></a>
+    <span class="phrase"><a name="tree_node.rationale"></a></span><a class="link" href="index.html#tree_node.rationale">Rationale</a>
+  </h3>
+<p>
+    Over the course of reimplementing a decision tree learning algorithm to use modern
+    C++ techniques, the need for a generic tree library became evident. The in-house
+    data structures in use at the time were undergoing modification as well. It was
+    found that the core operations occurred at the node level rather than at the
+    tree level, which stored only high-level algorithms. Efforts went underway to
+    retrofit these algorithms to use iterators and to further factor out generic
+    data structures from the decision tree components and other application-specific
+    utilities. This library represents the Boostified culmination of these efforts.
+  </p>
+<div class="important"><table border="0" summary="Important">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="http://www.boost.org/doc/libs/release/doc/src/images/important.png"></td>
+<th align="left">Important</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+      This library depends on Boost.ContainerGen, which is not yet a part
+      of Boost. For now, you must perform a Subversion checkout from the <a href="http://svn.boost.org/" target="_top">SVN
+      Trac</a>.
+    </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: September 08, 2012 at 05:52:33 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="tree_node/concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/changelog.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/changelog.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,119 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Changelog</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="prev" href="reference/emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/emplace_ctor_inline_def.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="tree_node.changelog"></a><a class="link" href="changelog.html" title="Changelog">Changelog</a>
+</h2></div></div></div>
+<h4>
+<a name="tree_node.changelog.h0"></a>
+      <span class="phrase"><a name="tree_node.changelog.from_0_3_to_0_4"></a></span><a class="link" href="changelog.html#tree_node.changelog.from_0_3_to_0_4">From
+      0.3 to 0.4</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/copy_constructible.html" title="BOOST_TREE_NODE_COPY_CONSTRUCTIBLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</span></code></a><span class="special">,</span> <a class="link" href="reference/copyable_and_movable.html" title="BOOST_TREE_NODE_COPYABLE_AND_MOVABLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span></code></a><span class="special">,</span> <span class="keyword">and</span>
+  <a class="link" href="reference/emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span></code></a> <span class="identifier">preprocessor</span> <span class="identifier">macros</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="identifier">size</span> <span class="identifier">type</span> <span class="keyword">and</span> <span class="identifier">emplacement</span> <span class="identifier">constructor</span> <span class="keyword">and</span> <span class="identifier">size</span> <span class="identifier">method</span> <span class="identifier">expressions</span> <span class="identifier">to</span>
+  <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">on_post_</span><span class="special">*</span><span class="error">`</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">on_post_</span><span class="special">*</span><span class="identifier">_impl</span><span class="error">`</span> <span class="identifier">method</span> <span class="identifier">expressions</span> <span class="identifier">to</span>
+  <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="identifier">iterator</span> <span class="identifier">range</span> <span class="keyword">and</span> <span class="identifier">immutable</span> <span class="identifier">iterator</span> <span class="identifier">range</span> <span class="identifier">types</span> <span class="identifier">to</span>
+  <a class="link" href="concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> <span class="identifier">models</span> <span class="identifier">are</span> <span class="identifier">now</span> Movable<span class="special">.</span>
+<span class="special">*</span> <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> <span class="identifier">models</span> <span class="identifier">are</span> <span class="identifier">no</span> <span class="identifier">longer</span> Equality Comparable <span class="keyword">or</span>
+  Less-Than Comparable<span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span></code></a> <span class="identifier">adaptor</span> <span class="keyword">class</span> <span class="keyword">template</span><span class="special">,</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a><span class="special">,</span> <span class="keyword">and</span> <span class="identifier">the</span>
+  <span class="identifier">corresponding</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/with_count_gen.html" title="with_count_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_count_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">with_depth</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">with_depth_base</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">with_depth_gen</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/with_height_gen.html" title="with_height_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_height_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">tree_node_equal</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">tree_node_strictly_equal</span><span class="error">`</span><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">tree_node_lexicographical_compare</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span>
+  <span class="error">`</span><span class="identifier">tree_node_strict_lexicographical_compare</span><span class="error">`</span> <span class="identifier">algorithms</span><span class="special">.</span>
+</pre>
+<h4>
+<a name="tree_node.changelog.h1"></a>
+      <span class="phrase"><a name="tree_node.changelog.from_0_2_to_0_3"></a></span><a class="link" href="changelog.html#tree_node.changelog.from_0_2_to_0_3">From
+      0.2 to 0.3</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a><span class="special">,</span> <a class="link" href="concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a><span class="special">,</span>
+  <a class="link" href="concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a><span class="special">,</span> <a class="link" href="concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary Tree Node</strong></span></a><span class="special">,</span> <span class="keyword">and</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a> <span class="identifier">data</span> <span class="identifier">structure</span><span class="special">,</span> <span class="identifier">the</span> <span class="identifier">corresponding</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+  <span class="identifier">model</span> <a class="link" href="reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a><span class="special">,</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="identifier">corresponding</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span>
+  <a class="link" href="reference/binary_node_gen.html" title="binary_node_gen"><code class="computeroutput"><span class="identifier">binary_node_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">raw_node</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a><span class="special">;</span> <span class="identifier">added</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a> <span class="keyword">and</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/nary_node_gen.html" title="nary_node_gen<Selector>"><code class="computeroutput"><span class="identifier">nary_node_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">raw_associative_node</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a><span class="special">;</span> <span class="identifier">added</span> <span class="identifier">the</span>
+  <span class="identifier">corresponding</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a> <span class="keyword">and</span> <span class="identifier">the</span>
+  <span class="identifier">corresponding</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/associative_node_gen.html" title="associative_node_gen<Selector>"><code class="computeroutput"><span class="identifier">associative_node_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="identifier">the</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span> <span class="error">`</span><span class="identifier">with_depth_base</span><span class="error">`</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <span class="error">`</span><span class="identifier">with_depth_gen</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span></code></a> <span class="identifier">adaptor</span> <span class="keyword">class</span> <span class="keyword">template</span><span class="special">,</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a><span class="special">,</span> <span class="keyword">and</span> <span class="identifier">the</span>
+  <span class="identifier">corresponding</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/with_position_gen.html" title="with_position_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_position_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span></code></a> <span class="identifier">adaptor</span> <span class="keyword">class</span> <span class="keyword">template</span><span class="special">,</span> <span class="identifier">the</span>
+  <span class="identifier">corresponding</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">model</span>
+  <a class="link" href="reference/with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a><span class="special">,</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="identifier">corresponding</span>
+  <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> <span class="identifier">model</span> <a class="link" href="reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span></code></a><span class="special">,</span> <a class="link" href="reference/post_order_desc_iter.html" title="post_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_descendant_iterator</span></code></a><span class="special">,</span>
+  <a class="link" href="reference/in_order_iterator.html" title="in_order_iterator<Node>"><code class="computeroutput"><span class="identifier">in_order_iterator</span></code></a><span class="special">,</span> <span class="keyword">and</span> <a class="link" href="reference/depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span></code></a> <span class="identifier">adaptor</span>
+  <span class="keyword">class</span> <span class="identifier">templates</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/dereference_iterator.html" title="dereference_iterator()"><code class="computeroutput"><span class="identifier">dereference_iterator</span><span class="special">()</span></code></a><span class="special">,</span> <span class="error">`</span><span class="identifier">tree_node_equal</span><span class="error">`</span><span class="special">,</span>
+  <span class="error">`</span><span class="identifier">tree_node_strictly_equal</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">tree_node_lexicographical_compare</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span>
+  <span class="error">`</span><span class="identifier">tree_node_strict_lexicographical_compare</span><span class="error">`</span> <span class="identifier">algorithms</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="special">[*</span><span class="identifier">Factory</span><span class="special">-</span><span class="identifier">Constructible</span> <span class="identifier">Tree</span> <span class="identifier">Node</span><span class="special">]</span> <span class="keyword">and</span> <span class="special">[*</span><span class="identifier">Cloneable</span> <span class="identifier">Tree</span> <span class="identifier">Node</span><span class="special">]</span>
+  <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">tree_node_factory</span><span class="error">`</span> <span class="identifier">facade</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">shared_tree_node_base</span><span class="error">`</span> <span class="error">`</span><span class="keyword">struct</span><span class="error">`</span> <span class="keyword">template</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">simple_node</span><span class="error">`</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">simple_associative_node</span><span class="error">`</span> <span class="identifier">data</span> <span class="identifier">structures</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">with_child_range_access</span><span class="error">`</span> <span class="identifier">adaptor</span> <span class="keyword">class</span> <span class="keyword">template</span><span class="special">;</span> <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a>
+  <span class="identifier">concept</span> <span class="identifier">now</span> <span class="identifier">requires</span> <span class="identifier">child</span> <span class="identifier">range</span> <span class="identifier">access</span> <span class="keyword">for</span> <span class="identifier">all</span> <span class="identifier">models</span><span class="special">.</span>
+</pre>
+<h4>
+<a name="tree_node.changelog.h2"></a>
+      <span class="phrase"><a name="tree_node.changelog.from_0_1_to_0_2"></a></span><a class="link" href="changelog.html#tree_node.changelog.from_0_1_to_0_2">From
+      0.1 to 0.2</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a><span class="special">,</span> <span class="special">[*</span><span class="identifier">Factory</span><span class="special">-</span><span class="identifier">Constructible</span> <span class="identifier">Tree</span> <span class="identifier">Node</span><span class="special">],</span> <span class="keyword">and</span>
+  <span class="special">[*</span><span class="identifier">Cloneable</span> <span class="identifier">Tree</span> <span class="identifier">Node</span><span class="special">]</span> <span class="identifier">concepts</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">tree_node_factory</span><span class="error">`</span> <span class="identifier">facade</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span></code></a> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">shared_tree_node_base</span><span class="error">`</span> <span class="error">`</span><span class="keyword">struct</span><span class="error">`</span> <span class="identifier">templates</span><span class="special">;</span>
+  <span class="identifier">each</span> <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> <span class="identifier">model</span> <span class="identifier">that</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="identifier">a</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">now</span> <span class="identifier">inherits</span> <span class="identifier">from</span>
+  <span class="identifier">a</span> <span class="identifier">corresponding</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> <span class="identifier">which</span><span class="special">,</span> <span class="identifier">in</span> <span class="identifier">turn</span><span class="special">,</span> <span class="identifier">inherits</span> <span class="identifier">from</span> <span class="identifier">one</span> <span class="identifier">of</span>
+  <span class="identifier">these</span> <span class="identifier">two</span> <span class="identifier">types</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">with_child_range_access</span><span class="error">`</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">with_depth</span><span class="error">`</span> <span class="identifier">adaptor</span> <span class="keyword">class</span> <span class="identifier">templates</span><span class="special">.</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/emplace_ctor_inline_def.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Concepts</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="prev" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="next" href="concepts/tree_node.html" title="Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts/tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="tree_node.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a>
+</h2></div></div></div>
+<h4>
+<a name="tree_node.concepts.h0"></a>
+      <span class="phrase"><a name="tree_node.concepts.core_concepts"></a></span><a class="link" href="concepts.html#tree_node.concepts.core_concepts">Core
+      Concepts</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a>
+    <span class="special">*</span> <a class="link" href="concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+    <span class="special">*</span> <a class="link" href="concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+    <span class="special">*</span> <a class="link" href="concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+        <span class="special">*</span> <a class="link" href="concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+        <span class="special">*</span> <a class="link" href="concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary Tree Node</strong></span></a>
+<span class="special">*</span> <a class="link" href="concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>
+<span class="special">*</span> <a class="link" href="concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+    <span class="special">*</span> <a class="link" href="concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+    <span class="special">*</span> <a class="link" href="concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="concepts/tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/associative_tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/associative_tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,499 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Associative Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="base_tree_node.html" title="Base Tree Node">
+<link rel="next" href="non_assoc_tree_node.html" title="Non-Associative Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="base_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_assoc_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.associative_tree_node"></a><a class="link" href="associative_tree_node.html" title="Associative Tree Node">Associative
+      Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.associative_tree_node.description"></a><a class="link" href="associative_tree_node.html#tree_node.concepts.associative_tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Models of this concept provide key-based access to their child nodes.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.associative_tree_node.refinement_of"></a><a class="link" href="associative_tree_node.html#tree_node.concepts.associative_tree_node.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Associative Tree Node</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">const_node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">key</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span>
+              <span class="keyword">const</span><span class="special">&</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code></span></dt>
+<dd><p>
+              Arguments to be forwarded to the appropriate <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+              constructor.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.associative_tree_node.types"></a><a class="link" href="associative_tree_node.html#tree_node.concepts.associative_tree_node.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          Three new types are introduced.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Key type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a key that a tree node will associate with a child
+                    node.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator range type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">iterator_range</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a range of child nodes and their associated keys.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model a Boost.Range concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator range type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">const_iterator_range</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of an immutable view of a range of child nodes and their
+                    associated keys.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model a Boost.Range concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+          In addition, the requirements for the iterator types are strengthened:
+        </p>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">first_type</span><span class="error">`</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">first</span><span class="error">`</span> <span class="identifier">member</span> <span class="identifier">variable</span> <span class="identifier">of</span>
+  <span class="identifier">type</span> <span class="error">`</span><span class="identifier">first_type</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Given</span> <span class="identifier">an</span> <span class="identifier">object</span> <span class="error">`</span><span class="identifier">itr</span><span class="error">`</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">itr</span><span class="special">-></span><span class="identifier">first</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span>
+  <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">second_type</span><span class="error">`</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">second</span><span class="error">`</span> <span class="identifier">member</span> <span class="identifier">variable</span>
+  <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">second_type</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Given</span> <span class="identifier">an</span> <span class="identifier">object</span> <span class="error">`</span><span class="identifier">itr</span><span class="error">`</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span><span class="special">,</span>
+  <span class="special">[^</span><a class="link" href="../reference/dereference_iterator.html" title="dereference_iterator()">dereference_iterator</a><span class="special">(</span><span class="identifier">itr</span><span class="special">)]</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">first_type</span><span class="error">`</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">first</span><span class="error">`</span> <span class="identifier">member</span>
+  <span class="identifier">variable</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">first_type</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Given</span> <span class="identifier">an</span> <span class="identifier">object</span> <span class="error">`</span><span class="identifier">itr</span><span class="error">`</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">itr</span><span class="special">-></span><span class="identifier">first</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span>
+  <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">second_type</span><span class="error">`</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">define</span> <span class="identifier">a</span> <span class="error">`</span><span class="identifier">second</span><span class="error">`</span> <span class="identifier">member</span>
+  <span class="identifier">variable</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">second_type</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Given</span> <span class="identifier">an</span> <span class="identifier">object</span> <span class="error">`</span><span class="identifier">itr</span><span class="error">`</span> <span class="identifier">of</span> <span class="identifier">type</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span><span class="special">,</span>
+  <span class="special">[^</span><a class="link" href="../reference/dereference_iterator.html" title="dereference_iterator()">dereference_iterator</a><span class="special">(</span><span class="identifier">itr</span><span class="special">)]</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="identifier">convertible</span> <span class="identifier">to</span> <span class="error">`</span><span class="identifier">Node</span> <span class="keyword">const</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.associative_tree_node.expressions"></a><a class="link" href="associative_tree_node.html#tree_node.concepts.associative_tree_node.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          In addition to the expressions defined in the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, the following expressions
+          must be valid.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Type requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">key</span><span class="special">,</span>
+                    <span class="identifier">args</span><span class="special">...);</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a tree node to be associated with the specified
+                    key in the range of children of the invoking node. The node returned
+                    will initialize its data with the specified arguments.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">key</span><span class="special">,</span>
+                    <span class="identifier">const_node</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type must model the Copy Constructible and Movable
+                    concepts.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a deep copy of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                    to be associated with the specified key in the range of children
+                    of the invoking node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">find</span><span class="special">(</span><span class="identifier">key</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing to a child node associated with
+                    the specified key, or <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">end</span><span class="special">()</span></code> if no such child exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Logarithmic
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">find</span><span class="special">(</span><span class="identifier">key</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing to a child node associated with
+                    the specified key, or <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">end</span><span class="special">()</span></code> if no such child exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Logarithmic
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">equal_range</span><span class="special">(</span><span class="identifier">key</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">const_iterator_range</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a Boost.Range of all child nodes
+                    associated with the specified key. The child nodes in the range
+                    returned cannot be modified. If no such children exist, then
+                    the range will be empty.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Logarithmic
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">equal_range</span><span class="special">(</span><span class="identifier">key</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">iterator_range</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a Boost.Range of all child nodes
+                    associated with the specified key. The child nodes in the range
+                    returned can be modified. If no such children exist, then the
+                    range will be empty.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Logarithmic
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove children
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">key</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">size_type</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Removes all child nodes associated with the specified key from
+                    the tree node. Returns the number of children removed.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children and their descendants
+                    in the range to be removed, plus logarithmic
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.associative_tree_node.models"></a><a class="link" href="associative_tree_node.html#tree_node.concepts.associative_tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="base_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="non_assoc_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/base_tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/base_tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,635 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Base Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="tree_node.html" title="Tree Node">
+<link rel="next" href="associative_tree_node.html" title="Associative Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.base_tree_node"></a><a class="link" href="base_tree_node.html" title="Base Tree Node">Base Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.base_tree_node.description"></a><a class="link" href="base_tree_node.html#tree_node.concepts.base_tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Models of this concept allow the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor types to parameterically
+          inherit their functionality for greater reuse.
+        </p>
+<p>
+          In practice, each <span class="bold"><strong>Base Tree Node</strong></span> model
+          must do the following:
+        </p>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Inherit</span> <span class="identifier">from</span> <span class="identifier">either</span> <a class="link" href="../reference/tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span></code></a> <span class="keyword">or</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="identifier">a</span>
+  <a class="link" href="type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Take</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">derived</span> <span class="identifier">type</span> <span class="keyword">and</span> <span class="identifier">the</span> <span class="identifier">data</span> <span class="identifier">type</span> <span class="identifier">as</span> <span class="keyword">template</span> <span class="identifier">parameters</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Also</span> <span class="identifier">take</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">key</span> <span class="identifier">type</span> <span class="keyword">if</span> <span class="identifier">the</span> <span class="identifier">derived</span> <span class="identifier">type</span> <span class="identifier">is</span> <span class="special">(</span><span class="identifier">possibly</span><span class="special">)</span> <span class="identifier">an</span>
+  <a class="link" href="associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="identifier">model</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Declare</span> <span class="identifier">a</span> <span class="keyword">template</span> <span class="identifier">instantiation</span> <span class="identifier">of</span> <a class="link" href="../reference/tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span></code></a> <span class="identifier">with</span> <span class="identifier">the</span> <span class="identifier">derived</span>
+  <span class="identifier">type</span> <span class="identifier">as</span> <span class="identifier">a</span> <span class="error">`</span><span class="keyword">friend</span> <span class="keyword">struct</span><span class="error">`</span> <span class="keyword">if</span> <span class="identifier">it</span> <span class="identifier">overrides</span> <span class="identifier">any</span> <span class="identifier">of</span> <a class="link" href="../reference/tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span></code></a>
+  <span class="identifier">implementation</span> <span class="identifier">methods</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.base_tree_node.refinement_of"></a><a class="link" href="base_tree_node.html#tree_node.concepts.base_tree_node.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Base</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Base Tree Node</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">base</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Base</span><span class="special">*</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">const_base</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Base</span> <span class="keyword">const</span><span class="special">*</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+              Node</strong></span></a> model that inherits from <code class="computeroutput"><span class="identifier">Base</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">copy</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span> <span class="keyword">const</span><span class="special">&</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">source</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">&&</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">itr</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">BIC</span></code></span></dt>
+<dd><p>
+              A type that models the Boolean Integral Constant concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">bic</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">BIC</span></code>.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.base_tree_node.types"></a><a class="link" href="base_tree_node.html#tree_node.concepts.base_tree_node.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.base_tree_node.expressions"></a><a class="link" href="base_tree_node.html#tree_node.concepts.base_tree_node.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          In addition to the expressions defined in the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, the following expressions
+          must be valid.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">get_derived</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a pointer to the same <code class="computeroutput"><span class="identifier">Node</span></code>
+                    object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_base</span><span class="special">-></span><span class="identifier">get_derived</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a pointer to the same immutable <code class="computeroutput"><span class="identifier">Node</span></code>
+                    object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+          Also, the following expressions must be valid (unless the <code class="computeroutput"><span class="identifier">Node</span></code> type does <span class="emphasis"><em>not</em></span>
+          define the operation within which the expression can be invoked).
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Must be valid within
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Base</span><span class="special">(</span><span class="identifier">copy</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Constructs a deep copy of the specified node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The initializer list of the <code class="computeroutput"><span class="identifier">Node</span></code>
+                    copy constructor.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Base</span><span class="special">(</span><span class="identifier">source</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Transfers the contents of the specified node to this one.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The initializer list of the <code class="computeroutput"><span class="identifier">Node</span></code>
+                    move constructor.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Base copy assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">copy_assign</span><span class="special">(</span><span class="identifier">copy</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Structurally modifies the invoking node so that it is a deep
+                    copy of the specified node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the <code class="computeroutput"><span class="identifier">Node</span></code>
+                    copy assignment operator.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children plus the number
+                    of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Base move assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">move_assign</span><span class="special">(</span><span class="identifier">source</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Structurally modifies the invoking node so that it stores the
+                    contents of the specified node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the <code class="computeroutput"><span class="identifier">Node</span></code>
+                    move assignment operator.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children plus the number
+                    of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy or move notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_copy_or_move</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Upholds any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    invariants not upheld by either the <code class="computeroutput"><span class="identifier">Node</span></code>
+                    copy or move constructor's initializer lists or by the base copy
+                    or move assignment method. For example, if the <code class="computeroutput"><span class="identifier">Base</span></code> type defines <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code> member variables referring
+                    to a parent and a number of child nodes, then this method and
+                    not the derived copy or move constructors must link the children
+                    to their parent via derived access because <code class="computeroutput"><span class="identifier">Node</span></code>
+                    will be an incomplete type during initialization.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the<code class="computeroutput"><span class="identifier">Node</span></code>
+                    copy or move constructor or assignment operator.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children plus the number
+                    of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Insertion notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_inserted</span><span class="special">(</span><span class="identifier">itr</span><span class="special">,</span>
+                    <span class="identifier">bic</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Updates any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    information invalidated by operations that insert or emplace
+                    the invoking node. The specified iterator points to this node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of any <code class="computeroutput"><span class="identifier">Node</span></code>
+                    insertion or emplacement member function.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant if <code class="computeroutput"><span class="identifier">BIC</span><span class="special">::</span><span class="identifier">value</span>
+                    <span class="special">==</span> <span class="keyword">true</span></code>,
+                    linear with respect to the number of siblings otherwise.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Erasure notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_erase</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Updates any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    information invalidated by operations that remove the specified
+                    children and their descendants from a node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of any <code class="computeroutput"><span class="identifier">Node</span></code>
+                    erasure member function.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children plus the number
+                    of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Clear notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_clear</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Updates any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    information invalidated by operations that remove all descendants
+                    from a node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">clear</span><span class="special">()</span></code> member function.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children removed plus the
+                    number of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left rotation notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_rotate_left</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Updates any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    information invalidated by operations that rotate a node to the
+                    left.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">rotate_left</span><span class="special">()</span></code> member function.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of ancestors.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right rotation notification
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">base</span><span class="special">-></span><span class="identifier">on_post_rotate_right</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Updates any <code class="computeroutput"><span class="identifier">Node</span></code>-specific
+                    information invalidated by operations that rotate a node to the
+                    right.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The body of the <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">rotate_right</span><span class="special">()</span></code> member function.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of ancestors.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.base_tree_node.models"></a><a class="link" href="base_tree_node.html#tree_node.concepts.base_tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/binary_tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/binary_tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,525 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Binary Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="non_assoc_tree_node.html" title="Non-Associative Tree Node">
+<link rel="next" href="nary_tree_node.html" title="N-ary Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="non_assoc_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.binary_tree_node"></a><a class="link" href="binary_tree_node.html" title="Binary Tree Node">Binary Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.binary_tree_node.description"></a><a class="link" href="binary_tree_node.html#tree_node.concepts.binary_tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Models of this concept store at most two child nodes: left and right. The
+          operations that this concept defines include access to these children and
+          rotations that use the appropriate child as a pivot node.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.binary_tree_node.refinement_of"></a><a class="link" href="binary_tree_node.html#tree_node.concepts.binary_tree_node.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative
+          Tree Node</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Binary Tree Node</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">const_node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code></span></dt>
+<dd><p>
+              Arguments to be forwarded to the appropriate <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+              constructor.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.binary_tree_node.types"></a><a class="link" href="binary_tree_node.html#tree_node.concepts.binary_tree_node.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.binary_tree_node.expressions"></a><a class="link" href="binary_tree_node.html#tree_node.concepts.binary_tree_node.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          In addition to the expressions defined in the <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> concept, the following
+          expressions must be valid.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Type requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Left child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">emplace_left</span><span class="special">(</span><span class="identifier">args</span><span class="special">...)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a tree node to be stored as the left child
+                    of the invoking node. The node returned will initialize its data
+                    with the specified arguments.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">insert_left</span><span class="special">(</span><span class="identifier">const_node</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type must model the Copy Constructible and Movable
+                    concepts.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a deep copy of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                    to be stored as the left child of the invoking node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">emplace_right</span><span class="special">(</span><span class="identifier">args</span><span class="special">...)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a tree node to be stored as the right child
+                    of the invoking node. The node returned will initialize its data
+                    with the specified arguments.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">insert_right</span><span class="special">(</span><span class="identifier">const_node</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type must model the Copy Constructible and Movable
+                    concepts.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a deep copy of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                    to be stored as the right child of the invoking node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">get_left_child_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the left child of the tree node, or a null pointer if
+                    no such tree node exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">get_left_child_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the left child of the tree node, or a null pointer if
+                    no such tree node exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">get_right_child_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the right child of the tree node, or a null pointer if
+                    no such tree node exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">get_right_child_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the right child of the tree node, or a null pointer if
+                    no such tree node exists.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate left
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">rotate_left</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Rotates the tree node in its hierarchy so that its right child,
+                    the pivot node, becomes its parent. The left child of the pivot
+                    node becomes the right child of the tree node. Returns the pivot
+                    node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate right
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">rotate_right</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Rotates the tree node in its hierarchy so that its left child,
+                    the pivot node, becomes its parent. The right child of the pivot
+                    node becomes the left child of the tree node. Returns the pivot
+                    node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove left child
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">erase_left</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Removes the left child from the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of the left
+                    child
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove right child
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">erase_right</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Removes the right child from the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of the right
+                    child
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.binary_tree_node.models"></a><a class="link" href="binary_tree_node.html#tree_node.concepts.binary_tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="non_assoc_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/full_tree_node_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/full_tree_node_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,165 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Full Tree Node Iterator</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="tree_node_iterator.html" title="Tree Node Iterator">
+<link rel="next" href="tree_node_desc_iterator.html" title="Tree Node Descendant Iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_desc_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator"></a><a class="link" href="full_tree_node_iterator.html" title="Full Tree Node Iterator">Full Tree
+      Node Iterator</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator.description"></a><a class="link" href="full_tree_node_iterator.html#tree_node.concepts.full_tree_node_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This concept specifies the requirement that models traverse the root node
+          as well as its descendants.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator.refinement_of"></a><a class="link" href="full_tree_node_iterator.html#tree_node.concepts.full_tree_node_iterator.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree
+          Node Iterator</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Iterator</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Full Tree Node Iterator</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">itr</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Iterator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              The value type of <code class="computeroutput"><span class="identifier">Iterator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">&</span></code>.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator.types"></a><a class="link" href="full_tree_node_iterator.html#tree_node.concepts.full_tree_node_iterator.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a> concept; however, the
+          requirements for the value type are strengthened: it must model the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a>
+          concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator.expressions"></a><a class="link" href="full_tree_node_iterator.html#tree_node.concepts.full_tree_node_iterator.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          None beyond those defined in the <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a> concept; however, the
+          type requirements for the constructors are strengthened, and their semantics
+          are clarified.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Type requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Iterator</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+<span class="identifier">Iterator</span> <span class="identifier">itr</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Constructs an iterator that will iterate through the specified
+                    node and its descendants.
+                  </p>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.full_tree_node_iterator.models"></a><a class="link" href="full_tree_node_iterator.html#tree_node.concepts.full_tree_node_iterator.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/breadth_first_iterator.html" title="breadth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/pre_order_iterator.html" title="pre_order_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/post_order_iterator.html" title="post_order_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/in_order_iterator.html" title="in_order_iterator<Node>"><code class="computeroutput"><span class="identifier">in_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/depth_first_iterator.html" title="depth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_iterator</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_desc_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/nary_tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/nary_tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,215 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>N-ary Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="binary_tree_node.html" title="Binary Tree Node">
+<link rel="next" href="type_generator.html" title="Type Generator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="type_generator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.nary_tree_node"></a><a class="link" href="nary_tree_node.html" title="N-ary Tree Node">N-ary Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.nary_tree_node.description"></a><a class="link" href="nary_tree_node.html#tree_node.concepts.nary_tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Models of this concept store arbitrary numbers of children and provide
+          simple child insertion expressions.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.nary_tree_node.refinement_of"></a><a class="link" href="nary_tree_node.html#tree_node.concepts.nary_tree_node.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative
+          Tree Node</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>N-ary Tree Node</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">const_node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code></span></dt>
+<dd><p>
+              Arguments to be forwarded to the appropriate <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+              constructor.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.nary_tree_node.types"></a><a class="link" href="nary_tree_node.html#tree_node.concepts.nary_tree_node.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.nary_tree_node.expressions"></a><a class="link" href="nary_tree_node.html#tree_node.concepts.nary_tree_node.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          In addition to the expressions defined in the <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> concept, the following
+          expressions must be valid.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Type requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">args</span><span class="special">...)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a tree node to be stored in the range of
+                    children of the invoking node. The node returned will initialize
+                    its data with the specified arguments.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Logarithmic
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">const_node</span><span class="special">)</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type must model the Copy Constructible and Movable
+                    concepts.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Creates and returns a deep copy of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                    to be stored in the range of children of the invoking node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of descendants of <code class="computeroutput"><span class="identifier">const_node</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.nary_tree_node.models"></a><a class="link" href="nary_tree_node.html#tree_node.concepts.nary_tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="type_generator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/non_assoc_tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/non_assoc_tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,88 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Non-Associative Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="associative_tree_node.html" title="Associative Tree Node">
+<link rel="next" href="binary_tree_node.html" title="Binary Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node"></a><a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node">Non-Associative
+      Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node.description"></a><a class="link" href="non_assoc_tree_node.html#tree_node.concepts.non_assoc_tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Models of this concept provide access to their child nodes via iterator
+          dereferencing.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node.refinement_of"></a><a class="link" href="non_assoc_tree_node.html#tree_node.concepts.non_assoc_tree_node.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node.types"></a><a class="link" href="non_assoc_tree_node.html#tree_node.concepts.non_assoc_tree_node.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept; however, the requirements
+          for the child iterator types are strengthened:
+        </p>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">The</span> <span class="identifier">value</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="error">`</span> <span class="identifier">must</span> <span class="identifier">be</span> <span class="error">`</span><span class="identifier">Node</span> <span class="keyword">const</span><span class="special">&</span><span class="error">`</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node.expressions"></a><a class="link" href="non_assoc_tree_node.html#tree_node.concepts.non_assoc_tree_node.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          None beyond those defined in the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.non_assoc_tree_node.models"></a><a class="link" href="non_assoc_tree_node.html#tree_node.concepts.non_assoc_tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,641 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Tree Node</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="../concepts.html" title="Concepts">
+<link rel="next" href="base_tree_node.html" title="Base Tree Node">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="base_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.tree_node"></a><a class="link" href="tree_node.html" title="Tree Node">Tree Node</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node.description"></a><a class="link" href="tree_node.html#tree_node.concepts.tree_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          All tree node implementations that this library provides model this concept:
+          a structure that maintains information about its data and its immediate
+          parent-child relationships. However, in practice, a full-fledged tree node
+          data structure or adaptor consists of three components: a <a class="link" href="base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> model that defines the functionality,
+          a <span class="bold"><strong>Tree Node</strong></span> model that inherits from the
+          base type and is better suited for external usage, and a <a class="link" href="type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> that returns the <a class="link" href="base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> model from which adaptor types
+          can also inherit.
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Tree Node</strong></span> concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">const_node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">args</span><span class="special">...</span></code></span></dt>
+<dd><p>
+              Arguments to be forwarded to the appropriate <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+              constructor.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node.types"></a><a class="link" href="tree_node.html#tree_node.concepts.tree_node.types" title="Associated Types">Associated Types</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Data type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of the object stored in a tree node.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a pointer to a <code class="computeroutput"><span class="identifier">Node</span></code>
+                    object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the Trivial Iterator concept, it must
+                    point to a mutable object, and it must be implicitly convertible
+                    to <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a pointer to a <code class="computeroutput"><span class="identifier">Node</span>
+                    <span class="keyword">const</span></code> object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the Trivial Iterator concept, and
+                    it must <span class="emphasis"><em>not</em></span> point to a mutable object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of iterator used to iterate through the children of
+                    a <code class="computeroutput"><span class="identifier">Node</span></code> object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the Input Iterator concept, and it
+                    must be convertible to <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span></code>.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of iterator used to iterate through the children of
+                    a <code class="computeroutput"><span class="identifier">Node</span> <span class="keyword">const</span></code>
+                    object.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the Input Iterator concept, and it
+                    must <span class="emphasis"><em>not</em></span> point to a mutable object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Size type
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">size_type</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of unsigned integer used to represent the number of
+                    children of a <code class="computeroutput"><span class="identifier">Node</span>
+                    <span class="keyword">const</span></code> object.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node.expressions"></a><a class="link" href="tree_node.html#tree_node.concepts.tree_node.expressions" title="Valid Expressions and Semantics">Valid Expressions
+        and Semantics</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">(</span><span class="identifier">args</span><span class="special">...)</span></code>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Constructs a <code class="computeroutput"><span class="identifier">Node</span></code>
+                    object that initializes its data with the specified arguments.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">get_data</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the object stored in the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">get_data</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the object stored in the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">get_parent_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a pointer to the parent of the tree node, or a null pointer
+                    if the node is the root.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">get_parent_ptr</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">pointer</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a pointer to the parent of the tree node, or a null pointer
+                    if the node is the root.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">begin</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing to the beginning of the range of
+                    children of the tree node. If the range is empty, then the iterator
+                    points past-the-end.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">begin</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing to the beginning of the range of
+                    children of the tree node. If the range is empty, then the iterator
+                    points past-the-end.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">end</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">const_iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing past the end of the range of children
+                    of the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">end</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">iterator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns an iterator pointing past the end of the range of children
+                    of the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">size</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">::</span><span class="identifier">size_type</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the number of children of the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">empty</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">bool</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Equivalent to <code class="computeroutput"><span class="identifier">const_node</span><span class="special">-></span><span class="identifier">begin</span><span class="special">()</span> <span class="special">==</span>
+                    <span class="identifier">const_node</span><span class="special">-></span><span class="identifier">end</span><span class="special">()</span></code>,
+                    but may be more efficient in certain cases.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">node</span><span class="special">-></span><span class="identifier">clear</span><span class="special">()</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Removes all children from the tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Linear with respect to the number of children and their descendants
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node.models"></a><a class="link" href="tree_node.html#tree_node.concepts.tree_node.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="base_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_desc_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_desc_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Tree Node Descendant Iterator</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="full_tree_node_iterator.html" title="Full Tree Node Iterator">
+<link rel="next" href="../reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="full_tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator"></a><a class="link" href="tree_node_desc_iterator.html" title="Tree Node Descendant Iterator">Tree Node
+      Descendant Iterator</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator.description"></a><a class="link" href="tree_node_desc_iterator.html#tree_node.concepts.tree_node_desc_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This concept may seem redundant at first, especially when iterating through
+          <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative
+          Tree Node</strong></span></a> objects; however, for <a class="link" href="associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> objects, models of
+          this concept provide the sole means of accessing the key associated with
+          each node being traversed. (Root nodes are not associated with keys at
+          the tree node level, so models of this concept do not traverse them.)
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator.refinement_of"></a><a class="link" href="tree_node_desc_iterator.html#tree_node.concepts.tree_node_desc_iterator.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree
+          Node Iterator</strong></span></a>
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Iterator</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Tree Node Descendant Iterator</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">itr</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Iterator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">&</span></code>.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator.types"></a><a class="link" href="tree_node_desc_iterator.html#tree_node.concepts.tree_node_desc_iterator.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a> concept; however, the
+          requirements for the value type are strengthened: it must be the appropriate
+          iterator type of <code class="computeroutput"><span class="identifier">Node</span></code>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator.expressions"></a><a class="link" href="tree_node_desc_iterator.html#tree_node.concepts.tree_node_desc_iterator.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          None beyond those defined in the <a class="link" href="tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a> concept; however, the
+          type requirements for the constructors are strengthened, and their semantics
+          are clarified.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Type requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Iterator</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+<span class="identifier">Iterator</span> <span class="identifier">itr</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Constructs an iterator that will iterate through the descendants
+                    of the specified node.
+                  </p>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_desc_iterator.models"></a><a class="link" href="tree_node_desc_iterator.html#tree_node.concepts.tree_node_desc_iterator.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/post_order_desc_iter.html" title="post_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="full_tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/tree_node_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,267 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Tree Node Iterator</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="type_generator.html" title="Type Generator">
+<link rel="next" href="full_tree_node_iterator.html" title="Full Tree Node Iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="type_generator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="full_tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.tree_node_iterator"></a><a class="link" href="tree_node_iterator.html" title="Tree Node Iterator">Tree Node Iterator</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_iterator.description"></a><a class="link" href="tree_node_iterator.html#tree_node.concepts.tree_node_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Tree-traversing iterators at the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> level must be created differently
+          from iterators at the Container level. Furthermore, tree node
+          iterators typically store more stateful information than their Container counterparts; requiring two of
+          them to check for dereferenceability may prove somewhat memory-inefficient.
+          This concept provides an alternate means of checking for dereferenceability
+          that requires the use of only the active iterator.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_iterator.refinement_of"></a><a class="link" href="tree_node_iterator.html#tree_node.concepts.tree_node_iterator.refinement_of" title="Refinement of">Refinement
+        of</a>
+</h4></div></div></div>
+<p>
+          Forward Iterator
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Iterator</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Tree Node Iterator</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">itr</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Iterator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Node</span></code></span></dt>
+<dd><p>
+              A type that models the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">node</span></code></span></dt>
+<dd><p>
+              An object of type <code class="computeroutput"><span class="identifier">Node</span><span class="special">&</span></code>.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_iterator.types"></a><a class="link" href="tree_node_iterator.html#tree_node.concepts.tree_node_iterator.types" title="Associated Types">Associated
+        Types</a>
+</h4></div></div></div>
+<p>
+          No additional types beyond those defined in the Forward Iterator concept.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_iterator.expressions"></a><a class="link" href="tree_node_iterator.html#tree_node.concepts.tree_node_iterator.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<p>
+          In addition to the expressions defined in the Forward Iterator concept, the following
+          expressions must be valid.
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Semantics
+                  </p>
+                </th>
+<th>
+                  <p>
+                    <a href="http://en.wikipedia.org/wiki/Amortized_analysis" target="_top">Runtime
+                    Complexity</a>
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Iterator</span><span class="special">()</span>
+<span class="identifier">Iterator</span> <span class="identifier">itr</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Constructs a non-dereferenceable (past-the-end) iterator.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Iterator</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+<span class="identifier">Iterator</span> <span class="identifier">itr</span><span class="special">(</span><span class="identifier">node</span><span class="special">)</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    Refinement-specific.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Amortized constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereferenceability
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">itr</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A type that can be used in a boolean context.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a value convertible to <code class="computeroutput"><span class="keyword">true</span></code>
+                    if <code class="computeroutput"><span class="identifier">itr</span></code> is dereferenceable,
+                    a value convertible to <code class="computeroutput"><span class="keyword">false</span></code>
+                    if it is past-the-end.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Node dereference
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal"><a class="link" href="../reference/dereference_iterator.html" title="dereference_iterator()">dereference_iterator</a>(itr)</code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span><span class="special">&</span></code>
+                    or <code class="computeroutput"><span class="identifier">Node</span> <span class="keyword">const</span><span class="special">&</span></code>, depending on the mutability
+                    of <code class="computeroutput"><span class="identifier">itr</span></code>.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns a reference to the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> to which <code class="computeroutput"><span class="identifier">itr</span></code> currently points.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constant
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+          The Forward Iterator requirement that the increment
+          operators must exhibit constant time complexity has been relaxed; they
+          now need only exhibit linear time complexity with respect to the number
+          of descendants in the worst case.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.tree_node_iterator.models"></a><a class="link" href="tree_node_iterator.html#tree_node.concepts.tree_node_iterator.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">All</span> <span class="identifier">models</span> <span class="identifier">of</span> <span class="identifier">the</span> <a class="link" href="full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a> <span class="identifier">concept</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">All</span> <span class="identifier">models</span> <span class="identifier">of</span> <span class="identifier">the</span> <a class="link" href="tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a> <span class="identifier">concept</span><span class="special">.</span>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="type_generator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="full_tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/type_generator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/concepts/type_generator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,151 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Type Generator</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="nary_tree_node.html" title="N-ary Tree Node">
+<link rel="next" href="tree_node_iterator.html" title="Tree Node Iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.concepts.type_generator"></a><a class="link" href="type_generator.html" title="Type Generator">Type Generator</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.type_generator.description"></a><a class="link" href="type_generator.html#tree_node.concepts.type_generator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          A <span class="bold"><strong>Type Generator</strong></span> is a Metafunction Class that returns a <a class="link" href="base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+          Tree Node</strong></span></a> from which <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor types can inherit the necessary
+          functionality.
+        </p>
+</div>
+<div class="variablelist">
+<p class="title"><b>Notation</b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Generator</span></code></span></dt>
+<dd><p>
+              A type that models the <span class="bold"><strong>Type Generator</strong></span>
+              concept.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Derived</span></code></span></dt>
+<dd><p>
+              The most descendant type that will inherit from the return type of
+              <code class="computeroutput"><span class="identifier">Generator</span></code>.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Key</span></code></span></dt>
+<dd><p>
+              The key type of the <a class="link" href="associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> to be returned.
+            </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">Data</span></code></span></dt>
+<dd><p>
+              The data type of the <a class="link" href="tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> to be returned.
+            </p></dd>
+</dl>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.type_generator.expressions"></a><a class="link" href="type_generator.html#tree_node.concepts.type_generator.expressions" title="Valid Expressions and Semantics">Valid
+        Expressions and Semantics</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Return Type
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Non-associative invocation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal">boost::mpl::apply_wrap2<Generator,Derived,Data>::type</code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    A <a class="link" href="non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> model
+                    whose <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code>
+                    is the same as <code class="computeroutput"><span class="identifier">Data</span></code>.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Associative invocation
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal">boost::mpl::apply_wrap3<Generator,Derived,Key,Data>::type</code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    An <a class="link" href="associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> model whose
+                    <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span></code> is the same as <code class="computeroutput"><span class="identifier">Key</span></code> and whose <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span></code> is the same as <code class="computeroutput"><span class="identifier">Data</span></code>.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.concepts.type_generator.models"></a><a class="link" href="type_generator.html#tree_node.concepts.type_generator.models" title="Models">Models</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../reference/binary_node_gen.html" title="binary_node_gen"><code class="computeroutput"><span class="identifier">binary_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/nary_node_gen.html" title="nary_node_gen<Selector>"><code class="computeroutput"><span class="identifier">nary_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/associative_node_gen.html" title="associative_node_gen<Selector>"><code class="computeroutput"><span class="identifier">associative_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_count_gen.html" title="with_count_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_count_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_height_gen.html" title="with_height_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_height_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_position_gen.html" title="with_position_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_position_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="../reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span></code></a>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_tree_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,122 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="prev" href="concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator">
+<link rel="next" href="reference/binary_node.html" title="binary_node<T>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts/tree_node_desc_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/binary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="tree_node.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<h4>
+<a name="tree_node.reference.h0"></a>
+      <span class="phrase"><a name="tree_node.reference.data_structures"></a></span><a class="link" href="reference.html#tree_node.reference.data_structures">Data
+      Structures</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h1"></a>
+      <span class="phrase"><a name="tree_node.reference.adaptor_types"></a></span><a class="link" href="reference.html#tree_node.reference.adaptor_types">Adaptor
+      Types</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h2"></a>
+      <span class="phrase"><a name="tree_node.reference.base_types"></a></span><a class="link" href="reference.html#tree_node.reference.base_types">Base
+      Types</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h3"></a>
+      <span class="phrase"><a name="tree_node.reference.type_generators"></a></span><a class="link" href="reference.html#tree_node.reference.type_generators">Type
+      Generators</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/binary_node_gen.html" title="binary_node_gen"><code class="computeroutput"><span class="identifier">binary_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/nary_node_gen.html" title="nary_node_gen<Selector>"><code class="computeroutput"><span class="identifier">nary_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/associative_node_gen.html" title="associative_node_gen<Selector>"><code class="computeroutput"><span class="identifier">associative_node_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_count_gen.html" title="with_count_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_count_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_height_gen.html" title="with_height_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_height_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_position_gen.html" title="with_position_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_position_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h4"></a>
+      <span class="phrase"><a name="tree_node.reference.iterator_types"></a></span><a class="link" href="reference.html#tree_node.reference.iterator_types">Iterator
+      Types</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/breadth_first_iterator.html" title="breadth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/pre_order_iterator.html" title="pre_order_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/post_order_iterator.html" title="post_order_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/post_order_desc_iter.html" title="post_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_descendant_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/in_order_iterator.html" title="in_order_iterator<Node>"><code class="computeroutput"><span class="identifier">in_order_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/depth_first_iterator.html" title="depth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_iterator</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h5"></a>
+      <span class="phrase"><a name="tree_node.reference.enum_types"></a></span><a class="link" href="reference.html#tree_node.reference.enum_types">Enum
+      Types</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/traversal_state.html" title="traversal_state"><code class="computeroutput"><span class="identifier">traversal_state</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h6"></a>
+      <span class="phrase"><a name="tree_node.reference.functions"></a></span><a class="link" href="reference.html#tree_node.reference.functions">Functions</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/dereference_iterator.html" title="dereference_iterator()"><code class="computeroutput"><span class="identifier">dereference_iterator</span><span class="special">()</span></code></a>
+</pre>
+<h4>
+<a name="tree_node.reference.h7"></a>
+      <span class="phrase"><a name="tree_node.reference.macros"></a></span><a class="link" href="reference.html#tree_node.reference.macros">Macros</a>
+    </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/copy_constructible.html" title="BOOST_TREE_NODE_COPY_CONSTRUCTIBLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/copyable_and_movable.html" title="BOOST_TREE_NODE_COPYABLE_AND_MOVABLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span></code></a>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts/tree_node_desc_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/binary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,834 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>associative_node<Key,Data,Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="nary_node_gen.html" title="nary_node_gen<Selector>">
+<link rel="next" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.associative_node"></a><a class="link" href="associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span><span class="special"><</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Data</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.description"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This class template is suitable for classes or algorithms that need to
+          map keys to child nodes in a tree node data structure. Objects of this
+          type can be stored by value, and their children can be accessed by their
+          associated keys for fast lookup.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.definition"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/associative_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.tpl_param"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Key</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a key object to be associated with a child of a
+                    <code class="computeroutput"><span class="identifier">associative_node</span></code>.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Data</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of the object to be stored in a <code class="computeroutput"><span class="identifier">associative_node</span></code>.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    * <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_. * <code class="literal">is_associative_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    ptr_mapS
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.model_of"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">Data</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+<span class="special">*</span> Copy Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">Data</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible
+<span class="special">*</span> Assignable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">Data</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible <span class="keyword">and</span> Movable
+<span class="special">*</span> Movable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">Data</span><span class="error">`</span> <span class="identifier">is</span> Movable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.public_bases"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">associative_node_base</span><span class="special"><</span>
+    <span class="identifier">associative_node</span><span class="special"><</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Data</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+  <span class="special">,</span> <span class="identifier">Selector</span>
+<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.members"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.members" title="Public Members">Public
+        Members</a>
+</h4></div></div></div>
+<p>
+          Given:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">associative_node_base</span><span class="special"><</span>
+            <span class="identifier">associative_node</span>
+          <span class="special">,</span> <span class="identifier">Key</span>
+          <span class="special">,</span> <span class="identifier">Data</span>
+          <span class="special">,</span> <span class="identifier">Selector</span>
+        <span class="special">></span>
+        <span class="identifier">super_t</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Key type, data type, iterator range type, immutable iterator
+                    range type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">traits</span>
+        <span class="identifier">traits</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">pointer</span>
+        <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_pointer</span>
+        <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">iterator</span>
+        <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_iterator</span>
+        <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node</span><span class="special">(</span><span class="identifier">associative_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node</span><span class="special">(</span><span class="identifier">associative_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">associative_node</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">associative_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">associative_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span>
+    <span class="identifier">insert</span><span class="special">(</span>
+        <span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span>
+      <span class="special">,</span> <span class="identifier">associative_node</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span>
+    <span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">find</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">find</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">const_iterator_range</span>
+    <span class="identifier">equal_range</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">iterator_range</span>
+    <span class="identifier">equal_range</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">erase</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.example"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+          <example/associative_node.cpp>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node.test"></a><a class="link" href="associative_node.html#tree_node.reference.associative_node.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+          <test/associative_node.cpp>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1052 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>associative_node_base<Derived,Key,Data,Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="associative_node.html" title="associative_node<Key,Data,Selector>">
+<link rel="next" href="associative_node_gen.html" title="associative_node_gen<Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.associative_node_base"></a><a class="link" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Data</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span></code> </a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.description"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a> class template
+          inherits its functionality from this class template. They differ only with
+          regard to template parameters: the <a class="link" href="associative_node.html" title="associative_node<Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node</span></code></a> class template
+          is meant to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">associative_node_base</span></code>
+          is more suitable as a base class template from which <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="associative_node_gen.html" title="associative_node_gen<Selector>"><code class="computeroutput"><span class="identifier">associative_node_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.definition"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/associative_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.tpl_param"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Key</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Data</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    * <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_. * <code class="literal">is_associative_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.model_of"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">Data</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.public_bases"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_base.members"></a><a class="link" href="associative_node_base.html#tree_node.reference.associative_node_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Key type, data type, iterator range type, immutable iterator
+                    range type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">Key</span> <span class="identifier">key_type</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="identifier">Data</span> <span class="identifier">data_type</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_ptr_selector</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">></span>
+              <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">></span>
+              <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">iterator</span><span class="special">,</span><span class="identifier">iterator</span><span class="special">></span>
+            <span class="special">>::</span><span class="identifier">type</span>
+            <span class="identifier">iterator_range</span><span class="special">;</span>
+    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special"><</span>
+                <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_ptr_selector</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">></span>
+              <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span><span class="identifier">const_iterator</span><span class="special">></span>
+              <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">const_iterator</span><span class="special">,</span><span class="identifier">const_iterator</span><span class="special">></span>
+            <span class="special">>::</span><span class="identifier">type</span>
+            <span class="identifier">const_iterator_range</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">pointer</span>
+        <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">const_pointer</span>
+        <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">associative_node_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">associative_node_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy or move notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_copy_or_move</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">copy_assign</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Derived</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span>
+    <span class="identifier">insert</span><span class="special">(</span>
+        <span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span>
+      <span class="special">,</span> <span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span>
+    <span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">find</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">find</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">const_iterator_range</span>
+    <span class="identifier">equal_range</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child search range
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">iterator_range</span>
+    <span class="identifier">equal_range</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">erase</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">key_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">key</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_derived</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_derived</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/associative_node_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,183 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>associative_node_gen<Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>">
+<link rel="next" href="with_count.html" title="with_count<BaseGenerator,T1,T2,Count>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.associative_node_gen"></a><a class="link" href="associative_node_gen.html" title="associative_node_gen<Selector>"><code class="computeroutput"><span class="identifier">associative_node_gen</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.synopsis"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_mapS</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">associative_node_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Key</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Data</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">associative_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Data</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">typedef</span> <span class="identifier">associative_node_gen</span><span class="special"><></span> <span class="identifier">associative_node_default_gen</span><span class="special">;</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.description"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.definition"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/associative_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.model_of"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.tpl_param"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type of <a class="link" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    * <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_. * <code class="literal">is_associative_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    ptr_mapS
+                  </p>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.expressions"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>"><code class="computeroutput"><span class="identifier">associative_node_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">Key</span></code> be the key type. Let <code class="computeroutput"><span class="identifier">Data</span></code> be the data type. Let <code class="computeroutput"><span class="identifier">Selector</span></code> be a valid <code class="computeroutput"><span class="identifier">associative_node_gen</span></code>
+          template argument.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap3<span class="special"><</span>
+    <span class="identifier">associative_node_gen</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="associative_node_base.html" title="associative_node_base<Derived,Key,Data,Selector>">associative_node_base</a><Derived,Key,Data,Selector></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.associative_node_gen.complexity"></a><a class="link" href="associative_node_gen.html#tree_node.reference.associative_node_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,866 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>binary_node<T></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="binary_node_base.html" title="binary_node_base<Derived,T>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.binary_node"></a><a class="link" href="binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.description"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This class template is suitable for classes or algorithms that require
+          a binary tree node data structure. Objects of this type can be stored by
+          value.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.definition"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.definition" title="Where defined">Where defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/binary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.tpl_param"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of the object to be stored in a <code class="computeroutput"><span class="identifier">binary_node</span></code>.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.model_of"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+<span class="special">*</span> Copy Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible
+<span class="special">*</span> Assignable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible <span class="keyword">and</span> Movable
+<span class="special">*</span> Movable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Movable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.public_bases"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">binary_node_base</span><span class="special"><</span><span class="identifier">binary_node</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span><span class="identifier">T</span><span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.members"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          Given:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">binary_node_base</span><span class="special"><</span><span class="identifier">binary_node</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">super_t</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Data type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">traits</span> <span class="identifier">traits</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">pointer</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_pointer</span> <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node</span><span class="special">(</span><span class="identifier">binary_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node</span><span class="special">(</span><span class="identifier">binary_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">binary_node</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">binary_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">binary_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace_left</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert_left</span><span class="special">(</span><span class="identifier">binary_node</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace_right</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert_right</span><span class="special">(</span><span class="identifier">binary_node</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_left_child_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_left_child_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_right_child_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_right_child_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate left
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">rotate_left</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate right
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">rotate_right</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove left child
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">erase_left</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove right child
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">erase_right</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.example"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+          <example/binary_node.cpp>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node.test"></a><a class="link" href="binary_node.html#tree_node.reference.binary_node.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+          <test/binary_node.cpp>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,1122 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>binary_node_base<Derived,T></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="binary_node.html" title="binary_node<T>">
+<link rel="next" href="binary_node_gen.html" title="binary_node_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.binary_node_base"></a><a class="link" href="binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.description"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="binary_node.html" title="binary_node<T>"><code class="computeroutput"><span class="identifier">binary_node</span></code></a> class template is
+          meant to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">binary_node_base</span></code>
+          is more suitable as a base class template from which <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="binary_node_gen.html" title="binary_node_gen"><code class="computeroutput"><span class="identifier">binary_node_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.definition"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/binary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.tpl_param"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.model_of"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.public_bases"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_base.members"></a><a class="link" href="binary_node_base.html#tree_node.reference.binary_node_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Data type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">data_type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">pointer</span>
+        <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">const_pointer</span>
+        <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">binary_node_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">binary_node_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy or move notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_copy_or_move</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">copy_assign</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">move_assign</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace_left</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert_left</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace_right</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert_right</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_left_child_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_left_child_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_right_child_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right child access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_right_child_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate left
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">rotate_left</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Rotate right
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">rotate_right</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove left child
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">erase_left</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove right child
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">erase_right</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_derived</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_derived</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/binary_node_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,114 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>binary_node_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="binary_node_base.html" title="binary_node_base<Derived,T>">
+<link rel="next" href="nary_node.html" title="nary_node<T,Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.binary_node_gen"></a><a class="link" href="binary_node_gen.html" title="binary_node_gen"><code class="computeroutput"><span class="identifier">binary_node_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.synopsis"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">struct</span> <span class="identifier">binary_node_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">binary_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.description"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.definition"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/binary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.model_of"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.expressions"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="binary_node_base.html" title="binary_node_base<Derived,T>"><code class="computeroutput"><span class="identifier">binary_node_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">T</span></code> be the data type.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span><span class="identifier">binary_node_gen</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="binary_node_base.html" title="binary_node_base<Derived,T>">binary_node_base</a><Derived,T></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.binary_node_gen.complexity"></a><a class="link" href="binary_node_gen.html#tree_node.reference.binary_node_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_desc_iter.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_desc_iter.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,671 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>breadth_first_descendant_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="breadth_first_iterator.html" title="breadth_first_iterator<Node>">
+<link rel="next" href="pre_order_iterator.html" title="pre_order_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="breadth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="pre_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter"></a><a class="link" href="breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.synopsis"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">breadth_first_descendant_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="comment">//, typename Node::iterator or typename Node::const_iterator</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">breadth_first_descendant_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">breadth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">breadth_first_descendant_iterator</span><span class="special">(</span>
+            <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.description"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the descendants of the specified root node in breadth-first
+          fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">C</span> <span class="identifier">B</span> <span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">F</span> <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.definition"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/breadth_first_desc_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.tpl_param"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.model_of"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.public_bases"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.members"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_descendant_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">explicit</span> <span class="identifier">breadth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">breadth_first_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">breadth_first_descendant_iterator</span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_descendant_iterator</span><span class="special">&</span>
+    <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">breadth_first_descendant_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_descendant_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_descendant_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_desc_iter.non_members"></a><a class="link" href="breadth_first_desc_iter.html#tree_node.reference.breadth_first_desc_iter.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="identifier">make_breadth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">breadth_first_descendant_iterator</span></code>
+                    that will iterate through the descendants of the specified node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">breadth_first_iterate_descendants</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the descendants of the specified node in breadth-first
+                    fashion, passing each element dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">breadth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="breadth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="pre_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/breadth_first_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,665 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>breadth_first_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="tree_node_base.html" title="tree_node_base<Derived>">
+<link rel="next" href="breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="breadth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.breadth_first_iterator"></a><a class="link" href="breadth_first_iterator.html" title="breadth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.synopsis"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">breadth_first_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+          <span class="special">,</span> <span class="identifier">Node</span><span class="special">*</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">breadth_first_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">breadth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">breadth_first_iterator</span><span class="special">(</span>
+            <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.description"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in breadth-first fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">A</span> <span class="identifier">C</span> <span class="identifier">B</span> <span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">F</span> <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.definition"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/breadth_first_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.tpl_param"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.model_of"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.public_bases"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.members"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">explicit</span> <span class="identifier">breadth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">breadth_first_iterator</span><span class="special">(</span><span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">breadth_first_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_iterator</span><span class="special">(</span><span class="identifier">breadth_first_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">breadth_first_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">breadth_first_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.breadth_first_iterator.non_members"></a><a class="link" href="breadth_first_iterator.html#tree_node.reference.breadth_first_iterator.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_breadth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">breadth_first_iterator</span></code>
+                    that will iterate through the specified node and its descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">breadth_first_iterate</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in breadth-first
+                    fashion, passing each node pointer dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">breadth_first_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tree_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="breadth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copy_constructible.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copy_constructible.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,81 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="dereference_iterator.html" title="dereference_iterator()">
+<link rel="next" href="copyable_and_movable.html" title="BOOST_TREE_NODE_COPYABLE_AND_MOVABLE">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dereference_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="copyable_and_movable.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.copy_constructible"></a><a class="link" href="copy_constructible.html" title="BOOST_TREE_NODE_COPY_CONSTRUCTIBLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copy_constructible.synopsis"></a><a class="link" href="copy_constructible.html#tree_node.reference.copy_constructible.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>                    <span class="special">\</span>
+        <span class="keyword">inline</span> <span class="identifier">Derived</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">copy</span><span class="special">)</span>                     <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+            <span class="identifier">Base</span><span class="special">::</span><span class="identifier">on_post_copy_or_move</span><span class="special">();</span>                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+        <span class="keyword">inline</span> <span class="identifier">Derived</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">)</span>                                        <span class="special">\</span>
+          <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="keyword">const_cast</span><span class="special"><</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&>(</span><span class="identifier">copy</span><span class="special">))</span>                           <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+            <span class="identifier">Base</span><span class="special">::</span><span class="identifier">on_post_copy_or_move</span><span class="special">();</span>                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copy_constructible.description"></a><a class="link" href="copy_constructible.html#tree_node.reference.copy_constructible.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Meant to be used in the <code class="computeroutput"><span class="keyword">public</span></code>
+          scope of a <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> model that is not a <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>, this macro defines the copy
+          constructors necessary for the <code class="computeroutput"><span class="identifier">Derived</span></code>
+          class to model the Copy Constructible concept. These copy constructors
+          forward their arguments to the derived copy constructor of the <code class="computeroutput"><span class="identifier">Base</span></code> class.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copy_constructible.definition"></a><a class="link" href="copy_constructible.html#tree_node.reference.copy_constructible.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dereference_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="copyable_and_movable.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copyable_and_movable.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/copyable_and_movable.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,115 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="copy_constructible.html" title="BOOST_TREE_NODE_COPY_CONSTRUCTIBLE">
+<link rel="next" href="emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="copy_constructible.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_header.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.copyable_and_movable"></a><a class="link" href="copyable_and_movable.html" title="BOOST_TREE_NODE_COPYABLE_AND_MOVABLE"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copyable_and_movable.synopsis"></a><a class="link" href="copyable_and_movable.html#tree_node.reference.copyable_and_movable.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>                  <span class="special">\</span>
+        <span class="identifier">BOOST_TREE_NODE_COPY_CONSTRUCTIBLE</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>                    <span class="special">\</span>
+        <span class="keyword">inline</span> <span class="identifier">Derived</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&</span> <span class="identifier">source</span><span class="special">)</span>                                     <span class="special">\</span>
+          <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">&&>(</span><span class="identifier">source</span><span class="special">))</span>                             <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+            <span class="identifier">Base</span><span class="special">::</span><span class="identifier">on_post_copy_or_move</span><span class="special">();</span>                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+        <span class="keyword">inline</span> <span class="identifier">Derived</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">)</span>                       <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+            <span class="keyword">if</span> <span class="special">(</span><span class="keyword">this</span> <span class="special">!=</span> <span class="special">&</span><span class="identifier">copy</span><span class="special">)</span>                                               <span class="special">\</span>
+            <span class="special">{</span>                                                                <span class="special">\</span>
+                <span class="identifier">Base</span><span class="special">::</span><span class="identifier">copy_assign</span><span class="special">(</span><span class="identifier">copy</span><span class="special">);</span>                                     <span class="special">\</span>
+                <span class="identifier">Base</span><span class="special">::</span><span class="identifier">on_post_copy_or_move</span><span class="special">();</span>                                <span class="special">\</span>
+            <span class="special">}</span>                                                                <span class="special">\</span>
+            <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>                                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+        <span class="keyword">inline</span> <span class="identifier">Derived</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">Derived</span><span class="special">&&</span> <span class="identifier">source</span><span class="special">)</span>                          <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+            <span class="keyword">if</span> <span class="special">(</span><span class="keyword">this</span> <span class="special">!=</span> <span class="special">&</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">&>(</span><span class="identifier">source</span><span class="special">))</span>                      <span class="special">\</span>
+            <span class="special">{</span>                                                                <span class="special">\</span>
+                <span class="identifier">Base</span><span class="special">::</span><span class="identifier">move_assign</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">&&>(</span><span class="identifier">source</span><span class="special">));</span>           <span class="special">\</span>
+                <span class="identifier">Base</span><span class="special">::</span><span class="identifier">on_post_copy_or_move</span><span class="special">();</span>                                <span class="special">\</span>
+            <span class="special">}</span>                                                                <span class="special">\</span>
+            <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>                                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copyable_and_movable.description"></a><a class="link" href="copyable_and_movable.html#tree_node.reference.copyable_and_movable.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Meant to be used in the <code class="computeroutput"><span class="keyword">public</span></code>
+          scope of a <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> model that inherits from a <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>, this macro defines the copy
+          and move constructors and the copy and move assignment operators necessary
+          for the <code class="computeroutput"><span class="identifier">Derived</span></code> class to
+          model the Copy Constructible, Assignable, and Movable concepts.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copyable_and_movable.usage"></a><a class="link" href="copyable_and_movable.html#tree_node.reference.copyable_and_movable.usage" title="Usage">Usage</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">BOOST_TREE_NODE_COPYABLE_AND_MOVABLE</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copyable_and_movable.arguments"></a><a class="link" href="copyable_and_movable.html#tree_node.reference.copyable_and_movable.arguments" title="Arguments">Arguments</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="special">/</span><span class="identifier">Derived</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">name</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">enclosing</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">Base</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">name</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">from</span> <span class="identifier">which</span> <span class="error">`</span><span class="identifier">Derived</span><span class="error">`</span> <span class="identifier">inherits</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.copyable_and_movable.definition"></a><a class="link" href="copyable_and_movable.html#tree_node.reference.copyable_and_movable.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="copy_constructible.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_header.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_desc_iter.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_desc_iter.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,697 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>depth_first_descendant_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="depth_first_iterator.html" title="depth_first_iterator<Node>">
+<link rel="next" href="traversal_state.html" title="traversal_state">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="depth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="traversal_state.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.depth_first_desc_iter"></a><a class="link" href="depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.synopsis"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">depth_first_descendant_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="comment">//, typename Node::iterator or typename Node::const_iterator</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">depth_first_descendant_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">depth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">depth_first_descendant_iterator</span><span class="special">(</span>
+            <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.description"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in depth-first fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">C</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">D</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">D</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">E</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">E</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">C</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">B</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">F</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">F</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">G</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">G</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">B</span>  <span class="identifier">post_order_traversal</span>
+</pre>
+<p>
+        </p>
+<p>
+          The traversal state conversion operator of this iterator will yield each
+          value in the column on the right at the appropriate iteration.
+        </p>
+<p>
+          This iterator is ideal for algorithms that need to perform both preprocessing
+          and postprocessing of a tree node, e.g. non-recursive copy constructors.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.definition"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/depth_first_desc_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.tpl_param"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.model_of"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.public_bases"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.members"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Default Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">depth_first_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs a <code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span></code>
+                    object that will point to the same element that the specified
+                    iterator points to.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">depth_first_descendant_iterator</span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span><span class="special">&</span>
+    <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">depth_first_descendant_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_descendant_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="identifier">pre_order_traversal</span></code>
+                    if this iterator has not yet examined the children of the current
+                    node, <code class="computeroutput"><span class="identifier">post_order_traversal</span></code>
+                    if this iterator has examined all of the children of the current
+                    node, or <code class="computeroutput"><span class="identifier">no_traversal</span></code>
+                    if this iterator is not dereferenceable.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_desc_iter.non_members"></a><a class="link" href="depth_first_desc_iter.html#tree_node.reference.depth_first_desc_iter.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="identifier">make_depth_first_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">depth_first_descendant_iterator</span></code>
+                    that will iterate through the descendants of the specified node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BinaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">depth_first_iterate_descendants</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">BinaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the descendants of the specified node in depth-first
+                    fashion, passing each element dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">depth_first_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="depth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="traversal_state.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/depth_first_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,694 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>depth_first_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="in_order_iterator.html" title="in_order_iterator<Node>">
+<link rel="next" href="depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="in_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="depth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.depth_first_iterator"></a><a class="link" href="depth_first_iterator.html" title="depth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.synopsis"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">depth_first_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+          <span class="special">,</span> <span class="identifier">Node</span><span class="special">*</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">depth_first_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">depth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">depth_first_iterator</span><span class="special">(</span>
+            <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.description"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in depth-first fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">A</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">C</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">D</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">D</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">E</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">E</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">C</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">B</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">F</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">F</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">G</span>  <span class="identifier">pre_order_traversal</span>
+<span class="identifier">G</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">B</span>  <span class="identifier">post_order_traversal</span>
+<span class="identifier">A</span>  <span class="identifier">post_order_traversal</span>
+</pre>
+<p>
+        </p>
+<p>
+          The traversal state conversion operator of this iterator will yield each
+          value in the column on the right at the appropriate iteration.
+        </p>
+<p>
+          This iterator is ideal for algorithms that need to perform both preprocessing
+          and postprocessing of a tree node.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.definition"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/depth_first_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.tpl_param"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.model_of"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.public_bases"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.members"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Default Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">depth_first_iterator</span><span class="special">(</span><span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs a <code class="computeroutput"><span class="identifier">depth_first_iterator</span></code>
+                    object that will point to the same element that the specified
+                    iterator points to.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span><span class="special">(</span><span class="identifier">depth_first_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">depth_first_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">depth_first_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined in the Forward Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="identifier">pre_order_traversal</span></code>
+                    if this iterator has not yet examined the children of the current
+                    node, <code class="computeroutput"><span class="identifier">post_order_traversal</span></code>
+                    if this iterator has examined all of the children of the current
+                    node, or <code class="computeroutput"><span class="identifier">no_traversal</span></code>
+                    if this iterator is not dereferenceable.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.depth_first_iterator.non_members"></a><a class="link" href="depth_first_iterator.html#tree_node.reference.depth_first_iterator.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_depth_first_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">depth_first_iterator</span></code>
+                    that will iterate through the specified node and its descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BinaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">depth_first_iterate</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">BinaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+    <span class="comment">//-></span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in depth-first
+                    fashion, passing each node pointer dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">depth_first_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="in_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="depth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/dereference_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/dereference_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>dereference_iterator()</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="traversal_state.html" title="traversal_state">
+<link rel="next" href="copy_constructible.html" title="BOOST_TREE_NODE_COPY_CONSTRUCTIBLE">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="traversal_state.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="copy_constructible.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.dereference_iterator"></a><a class="link" href="dereference_iterator.html" title="dereference_iterator()"><code class="computeroutput"><span class="identifier">dereference_iterator</span><span class="special">()</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.dereference_iterator.synopsis"></a><a class="link" href="dereference_iterator.html#tree_node.reference.dereference_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
+    <span class="identifier">implementation_defined</span> <span class="identifier">dereference_iterator</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">itr</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.dereference_iterator.description"></a><a class="link" href="dereference_iterator.html#tree_node.reference.dereference_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This function takes in a <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a> and returns the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a>
+          to which it currently points. In terms of genericity, this function is
+          necessary not only because it handles both <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a> and <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a> models, but
+          because the iterator interface of associative Boost.PointerContainer types is different
+          from that of their standard library counterparts.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.dereference_iterator.definition"></a><a class="link" href="dereference_iterator.html#tree_node.reference.dereference_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/algorithm/dereference_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="traversal_state.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="copy_constructible.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_base_fwd.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_base_fwd.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL">
+<link rel="next" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_fwd_decl.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_inline_hdr.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.emplace_ctor_base_fwd"></a><a class="link" href="emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_base_fwd.synopsis"></a><a class="link" href="emplace_ctor_base_fwd.html#tree_node.reference.emplace_ctor_base_fwd.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>                <span class="special">\</span>
+      <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span>                                                                <span class="special">\</span>
+            <span class="identifier">BOOST_PP_CAT</span><span class="special">(</span><span class="identifier">BOOST_PP_ENUM_</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)(</span>                                 <span class="special">\</span>
+                <span class="identifier">n</span>                                                            <span class="special">\</span>
+              <span class="special">,</span> <span class="identifier">BOOST_CONTAINER_PP_PARAM_FORWARD</span>                             <span class="special">\</span>
+              <span class="special">,</span> <span class="identifier">_</span>                                                            <span class="special">\</span>
+            <span class="special">)</span>                                                                <span class="special">\</span>
+        <span class="special">)</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_base_fwd.description"></a><a class="link" href="emplace_ctor_base_fwd.html#tree_node.reference.emplace_ctor_base_fwd.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Defined only if the compiler does not support perfect forwarding, this
+          macro expands to the first part of the initializer list of a constructor
+          that will emulate perfect forwarding. Used by <a class="link" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span></code></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_base_fwd.definition"></a><a class="link" href="emplace_ctor_base_fwd.html#tree_node.reference.emplace_ctor_base_fwd.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_fwd_decl.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_inline_hdr.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_fwd_decl.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_fwd_decl.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,97 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER">
+<link rel="next" href="emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_header.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_base_fwd.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl"></a><a class="link" href="emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl.synopsis"></a><a class="link" href="emplace_ctor_fwd_decl.html#tree_node.reference.emplace_ctor_fwd_decl.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">)</span>                <span class="special">\</span>
+        <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">);</span>                 <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl.description"></a><a class="link" href="emplace_ctor_fwd_decl.html#tree_node.reference.emplace_ctor_fwd_decl.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Defined only if the compiler does not support perfect forwarding, and meant
+          to be used in the <code class="computeroutput"><span class="keyword">public</span></code> scope
+          of a <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+          Tree Node</strong></span></a>, this macro expands to the forward declaration
+          of a constructor that will emulate it. Uses <a class="link" href="emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span></code></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl.usage"></a><a class="link" href="emplace_ctor_fwd_decl.html#tree_node.reference.emplace_ctor_fwd_decl.usage" title="Usage">Usage</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting">BOOST_PP_REPEAT<span class="special">(</span>
+    <span class="identifier">BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS</span>
+  <span class="special">,</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span>
+  <span class="special">,</span> <span class="identifier">Type</span>
+<span class="special">)</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl.arguments"></a><a class="link" href="emplace_ctor_fwd_decl.html#tree_node.reference.emplace_ctor_fwd_decl.arguments" title="Arguments">Arguments</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="special">/</span><span class="identifier">z</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">next</span> <span class="identifier">available</span> BOOST_PP_REPEAT <span class="identifier">dimension</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">n</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">number</span> <span class="identifier">of</span> <span class="identifier">arguments</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="identifier">current</span> <span class="identifier">iteration</span><span class="error">'</span><span class="identifier">s</span> <span class="identifier">constructor</span>
+  <span class="identifier">will</span> <span class="identifier">accept</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">Type</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">name</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">enclosing</span> <span class="identifier">type</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_fwd_decl.definition"></a><a class="link" href="emplace_ctor_fwd_decl.html#tree_node.reference.emplace_ctor_fwd_decl.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_header.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_base_fwd.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_header.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_header.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,81 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="copyable_and_movable.html" title="BOOST_TREE_NODE_COPYABLE_AND_MOVABLE">
+<link rel="next" href="emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="copyable_and_movable.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_fwd_decl.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.emplace_ctor_header"></a><a class="link" href="emplace_ctor_header.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_header.synopsis"></a><a class="link" href="emplace_ctor_header.html#tree_node.reference.emplace_ctor_header.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">)</span>                  <span class="special">\</span>
+        <span class="identifier">BOOST_PP_EXPR_IF</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="keyword">template</span> <span class="special"><)</span>                                      <span class="special">\</span>
+            <span class="identifier">BOOST_PP_ENUM_PARAMS_Z</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P</span><span class="special">)</span>                         <span class="special">\</span>
+        <span class="identifier">BOOST_PP_EXPR_IF</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="special">>)</span>                                               <span class="special">\</span>
+        <span class="identifier">BOOST_PP_EXPR_IIF</span><span class="special">(</span><span class="identifier">BOOST_PP_EQUAL</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="number">1</span><span class="special">),</span> <span class="keyword">explicit</span><span class="special">)</span>                    <span class="special">\</span>
+        <span class="identifier">Type</span><span class="special">(</span>                                                                <span class="special">\</span>
+            <span class="identifier">BOOST_PP_CAT</span><span class="special">(</span><span class="identifier">BOOST_PP_ENUM_</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)(</span>                                 <span class="special">\</span>
+                <span class="identifier">n</span>                                                            <span class="special">\</span>
+              <span class="special">,</span> <span class="identifier">BOOST_CONTAINER_PP_PARAM_LIST</span>                                <span class="special">\</span>
+              <span class="special">,</span> <span class="identifier">_</span>                                                            <span class="special">\</span>
+            <span class="special">)</span>                                                                <span class="special">\</span>
+        <span class="special">)</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_header.description"></a><a class="link" href="emplace_ctor_header.html#tree_node.reference.emplace_ctor_header.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Defined only if the compiler does not support perfect forwarding, this
+          macro expands to the header of a constructor that will emulate it. Used
+          by <a class="link" href="emplace_ctor_fwd_decl.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL</span></code></a>
+          and <a class="link" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span></code></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_header.definition"></a><a class="link" href="emplace_ctor_header.html#tree_node.reference.emplace_ctor_header.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="copyable_and_movable.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_fwd_decl.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_def.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_def.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,101 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR">
+<link rel="next" href="../changelog.html" title="Changelog">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_inline_hdr.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def"></a><a class="link" href="emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def.synopsis"></a><a class="link" href="emplace_ctor_inline_def.html#tree_node.reference.emplace_ctor_inline_def.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Tuple</span><span class="special">)</span>             <span class="special">\</span>
+        <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Tuple</span><span class="special">)</span>          <span class="special">\</span>
+        <span class="special">{</span>                                                                    <span class="special">\</span>
+        <span class="special">}</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def.description"></a><a class="link" href="emplace_ctor_inline_def.html#tree_node.reference.emplace_ctor_inline_def.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Defined only if the compiler does not support perfect forwarding, and meant
+          to be used in the <code class="computeroutput"><span class="keyword">public</span></code> scope
+          of a <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> model that inherits from a <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> and defines no additional
+          members, this macro expands to the inline definition of a constructor that
+          will emulate it. Uses <a class="link" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span></code></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def.usage"></a><a class="link" href="emplace_ctor_inline_def.html#tree_node.reference.emplace_ctor_inline_def.usage" title="Usage">Usage</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting">BOOST_PP_REPEAT<span class="special">(</span>
+    <span class="identifier">BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS</span>
+  <span class="special">,</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span>
+  <span class="special">,</span> <span class="special">(</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">)</span>
+<span class="special">)</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def.arguments"></a><a class="link" href="emplace_ctor_inline_def.html#tree_node.reference.emplace_ctor_inline_def.arguments" title="Arguments">Arguments</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <span class="special">/</span><span class="identifier">z</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">next</span> <span class="identifier">available</span> BOOST_PP_REPEAT <span class="identifier">dimension</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">n</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">number</span> <span class="identifier">of</span> <span class="identifier">arguments</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="identifier">current</span> <span class="identifier">iteration</span><span class="error">'</span><span class="identifier">s</span> <span class="identifier">constructor</span>
+  <span class="identifier">will</span> <span class="identifier">accept</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">Derived</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">name</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">enclosing</span> <span class="identifier">type</span><span class="special">.</span>
+<span class="special">*</span> <span class="special">/</span><span class="identifier">Base</span><span class="special">/</span> <span class="special">--</span> <span class="identifier">The</span> <span class="identifier">name</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">type</span> <span class="identifier">from</span> <span class="identifier">which</span> <span class="error">`</span><span class="identifier">Derived</span><span class="error">`</span> <span class="identifier">inherits</span><span class="special">.</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_def.definition"></a><a class="link" href="emplace_ctor_inline_def.html#tree_node.reference.emplace_ctor_inline_def.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_inline_hdr.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_hdr.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/emplace_ctor_inline_hdr.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,80 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD">
+<link rel="next" href="emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_base_fwd.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_inline_def.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_hdr"></a><a class="link" href="emplace_ctor_inline_hdr.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_hdr.synopsis"></a><a class="link" href="emplace_ctor_inline_hdr.html#tree_node.reference.emplace_ctor_inline_hdr.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Tuple</span><span class="special">)</span>          <span class="special">\</span>
+        <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER</span><span class="special">(</span>                             <span class="special">\</span>
+            <span class="identifier">z</span>                                                                <span class="special">\</span>
+          <span class="special">,</span> <span class="identifier">n</span>                                                                <span class="special">\</span>
+          <span class="special">,</span> <span class="identifier">BOOST_PP_TUPLE_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">Tuple</span><span class="special">)</span>                                 <span class="special">\</span>
+        <span class="special">)</span>                                                                    <span class="special">\</span>
+        <span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span><span class="special">(</span>                           <span class="special">\</span>
+            <span class="identifier">z</span>                                                                <span class="special">\</span>
+          <span class="special">,</span> <span class="identifier">n</span>                                                                <span class="special">\</span>
+          <span class="special">,</span> <span class="identifier">BOOST_PP_TUPLE_ELEM</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">Tuple</span><span class="special">)</span>                                 <span class="special">\</span>
+        <span class="special">)</span>                                                                    <span class="special">\</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_hdr.description"></a><a class="link" href="emplace_ctor_inline_hdr.html#tree_node.reference.emplace_ctor_inline_hdr.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          Defined only if the compiler does not support perfect forwarding, this
+          macro expands to the header of a constructor that emulates it along witht
+          the first part of its initialization list. Uses <a class="link" href="emplace_ctor_base_fwd.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD</span></code></a>;
+          used by <a class="link" href="emplace_ctor_inline_def.html" title="BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF"><code class="computeroutput"><span class="identifier">BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF</span></code></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.emplace_ctor_inline_hdr.definition"></a><a class="link" href="emplace_ctor_inline_hdr.html#tree_node.reference.emplace_ctor_inline_hdr.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/preprocessor.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_ctor_base_fwd.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_ctor_inline_def.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/in_order_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/in_order_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,779 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>in_order_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="post_order_desc_iter.html" title="post_order_descendant_iterator<Node>">
+<link rel="next" href="depth_first_iterator.html" title="depth_first_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="post_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="depth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.in_order_iterator"></a><a class="link" href="in_order_iterator.html" title="in_order_iterator<Node>"><code class="computeroutput"><span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.synopsis"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">in_order_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+          <span class="special">,</span> <span class="identifier">Node</span><span class="special">*</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bidirectional_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">in_order_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">in_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">start_left</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">in_order_iterator</span><span class="special">(</span>
+            <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.description"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in in-order fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          The tree nodes will be traversed forward in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">D</span> <span class="identifier">C</span> <span class="identifier">E</span> <span class="identifier">A</span> <span class="identifier">F</span> <span class="identifier">B</span> <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator can also be used to traverse the tree nodes <span class="emphasis"><em>backwards</em></span>:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">G</span> <span class="identifier">B</span> <span class="identifier">F</span> <span class="identifier">A</span> <span class="identifier">E</span> <span class="identifier">C</span> <span class="identifier">D</span>
+</pre>
+<p>
+        </p>
+<div class="important"><table border="0" summary="Important">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="http://www.boost.org/doc/libs/release/doc/src/images/important.png"></td>
+<th align="left">Important</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+            This iterator works only on <a class="link" href="../concepts/binary_tree_node.html" title="Binary Tree Node"><span class="bold"><strong>Binary Tree Node</strong></span></a> models.
+          </p></td></tr>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.definition"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/in_order_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.tpl_param"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.model_of"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+<span class="special">*</span> Bidirectional Iterator
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.public_bases"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.members"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">in_order_iterator</span><span class="special">(</span><span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">in_order_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">(</span><span class="identifier">in_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">in_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-decrement operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Reverse Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-decrement operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">in_order_iterator</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Reverse Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.in_order_iterator.non_members"></a><a class="link" href="in_order_iterator.html#tree_node.reference.in_order_iterator.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Forward Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_in_order_forward_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">in_order_iterator</span></code>
+                    that will iterate forward through the specified node and its
+                    descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reverse iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_in_order_reverse_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">in_order_iterator</span></code>
+                    that will iterate in reverse through the specified node and its
+                    descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Forward iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">in_order_iterate_forward</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in forward
+                    in-order fashion, passing each node pointer dereferenced to the
+                    specified Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reverse iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">in_order_iterate_reverse</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in reverse
+                    in-order fashion, passing each element dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">N2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">N2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">in_order_iterator</span><span class="special"><</span><span class="identifier">N2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="post_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="depth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,691 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>nary_node<T,Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="binary_node_gen.html" title="binary_node_gen">
+<link rel="next" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.nary_node"></a><a class="link" href="nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.description"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This class template is suitable for classes or algorithms that require
+          a tree node data structure that can handle an arbitrary number of children.
+          Objects of this type can be stored by value.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.definition"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.definition" title="Where defined">Where defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/nary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.tpl_param"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.tpl_param" title="Template Parameters">Template Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of the object to be stored in an <code class="computeroutput"><span class="identifier">nary_node</span></code>.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    ptr_dequeS
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.model_of"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+<span class="special">*</span> Copy Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible
+<span class="special">*</span> Assignable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Copy Constructible <span class="keyword">and</span> Movable
+<span class="special">*</span> Movable <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Movable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.public_bases"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">nary_node_base</span><span class="special"><</span><span class="identifier">nary_node</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">>,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.members"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          Given:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">nary_node_base</span><span class="special"><</span><span class="identifier">nary_node</span><span class="special">,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span> <span class="identifier">super_t</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Data type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">traits</span> <span class="identifier">traits</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">pointer</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_pointer</span> <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">super_t</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node</span><span class="special">(</span><span class="identifier">nary_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node</span><span class="special">(</span><span class="identifier">nary_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">nary_node</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">nary_node</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">nary_node</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Movable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert</span><span class="special">(</span><span class="identifier">nary_node</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.example"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+          <example/nary_node.cpp>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node.test"></a><a class="link" href="nary_node.html#tree_node.reference.nary_node.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+          <test/nary_node.cpp>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="binary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,893 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>nary_node_base<Derived,T,Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="nary_node.html" title="nary_node<T,Selector>">
+<link rel="next" href="nary_node_gen.html" title="nary_node_gen<Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.nary_node_base"></a><a class="link" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.description"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="nary_node.html" title="nary_node<T,Selector>"><code class="computeroutput"><span class="identifier">nary_node</span></code></a> class template is meant
+          to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">nary_node_base</span></code>
+          is more suitable as a base class template from which <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="nary_node_gen.html" title="nary_node_gen<Selector>"><code class="computeroutput"><span class="identifier">nary_node_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.definition"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/nary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.tpl_param"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.model_of"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary Tree Node</strong></span></a>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> Default Constructible <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T</span><span class="error">`</span> <span class="identifier">is</span> Default Constructible
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.public_bases"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_base.members"></a><a class="link" href="nary_node_base.html#tree_node.reference.nary_node_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Data type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">data_type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">pointer</span>
+        <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">>::</span><span class="identifier">const_pointer</span>
+        <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Immutable iterator type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+        <span class="identifier">const_iterator</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">nary_node_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">nary_node_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy or move notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_copy_or_move</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived copy assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">copy_assign</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move assignment
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Derived</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Data access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typename</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">data_type</span><span class="special">&</span> <span class="identifier">get_data</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Parent access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_parent_ptr</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="identifier">iterator</span> <span class="identifier">emplace</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Child copy creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">insert</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">child</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/nary_tree_node.html" title="N-ary Tree Node"><span class="bold"><strong>N-ary
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range begin access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range past-the-end access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Children range size query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Leaf node query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Remove all children
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+                    Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_derived</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_derived</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base
+                    Tree Node</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nary_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/nary_node_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,176 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>nary_node_gen<Selector></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>">
+<link rel="next" href="associative_node.html" title="associative_node<Key,Data,Selector>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.nary_node_gen"></a><a class="link" href="nary_node_gen.html" title="nary_node_gen<Selector>"><code class="computeroutput"><span class="identifier">nary_node_gen</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.synopsis"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Selector</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_dequeS</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">nary_node_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">nary_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Selector</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+
+    <span class="keyword">typedef</span> <span class="identifier">nary_node_gen</span><span class="special"><></span> <span class="identifier">nary_node_default_gen</span><span class="special">;</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.description"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.definition"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/nary_node.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.model_of"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.tpl_param"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Selector</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type that determines the child container type of <a class="link" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="literal">is_recursive_selector<Selector></code>
+                    must return boost::mpl::true_.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    ptr_dequeS
+                  </p>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.expressions"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>"><code class="computeroutput"><span class="identifier">nary_node_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">T</span></code> be the data type. Let <code class="computeroutput"><span class="identifier">Selector</span></code> be a valid <code class="computeroutput"><span class="identifier">nary_node_gen</span></code>
+          template argument.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span><span class="identifier">nary_node_gen</span><span class="special"><</span><span class="identifier">Selector</span><span class="special">>,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="nary_node_base.html" title="nary_node_base<Derived,T,Selector>">nary_node_base</a><Derived,T,Selector></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.nary_node_gen.complexity"></a><a class="link" href="nary_node_gen.html#tree_node.reference.nary_node_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nary_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="associative_node.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_desc_iter.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_desc_iter.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,671 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>post_order_descendant_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="post_order_iterator.html" title="post_order_iterator<Node>">
+<link rel="next" href="in_order_iterator.html" title="in_order_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="post_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="in_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.post_order_desc_iter"></a><a class="link" href="post_order_desc_iter.html" title="post_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.synopsis"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">post_order_descendant_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="comment">//, typename Node::iterator or typename Node::const_iterator</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">post_order_descendant_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">post_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">post_order_descendant_iterator</span><span class="special">(</span>
+            <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.description"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the descendants of the specified root node in post-order
+          fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">C</span> <span class="identifier">F</span> <span class="identifier">G</span> <span class="identifier">B</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.definition"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/post_order_desc_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.tpl_param"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.model_of"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.public_bases"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.members"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">post_order_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">post_order_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">post_order_descendant_iterator</span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span><span class="special">&</span>
+    <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">post_order_descendant_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_descendant_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_desc_iter.non_members"></a><a class="link" href="post_order_desc_iter.html#tree_node.reference.post_order_desc_iter.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="identifier">make_post_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">post_order_descendant_iterator</span></code>
+                    that will iterate through the descendants of the specified node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">post_order_iterate_descendants</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the descendants of the specified node in post-order
+                    fashion, passing each element dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">post_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="post_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="in_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/post_order_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,665 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>post_order_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>">
+<link rel="next" href="post_order_desc_iter.html" title="post_order_descendant_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="pre_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="post_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.post_order_iterator"></a><a class="link" href="post_order_iterator.html" title="post_order_iterator<Node>"><code class="computeroutput"><span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.synopsis"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">post_order_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+          <span class="special">,</span> <span class="identifier">Node</span><span class="special">*</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">post_order_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">post_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">post_order_iterator</span><span class="special">(</span>
+            <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.description"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in post-order fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">C</span> <span class="identifier">F</span> <span class="identifier">G</span> <span class="identifier">B</span> <span class="identifier">A</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.definition"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/post_order_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.tpl_param"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.model_of"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.public_bases"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.members"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">explicit</span> <span class="identifier">post_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">post_order_iterator</span><span class="special">(</span><span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">post_order_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_iterator</span><span class="special">(</span><span class="identifier">post_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">post_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">post_order_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.post_order_iterator.non_members"></a><a class="link" href="post_order_iterator.html#tree_node.reference.post_order_iterator.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_post_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">post_order_iterator</span></code>
+                    that will iterate through the specified node and its descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">post_order_iterate</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in post-order
+                    fashion, passing each node pointer dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">post_order_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="pre_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="post_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_desc_iter.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_desc_iter.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,671 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>pre_order_descendant_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="pre_order_iterator.html" title="pre_order_iterator<Node>">
+<link rel="next" href="post_order_iterator.html" title="post_order_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="pre_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="post_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.pre_order_desc_iter"></a><a class="link" href="pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.synopsis"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">pre_order_descendant_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="comment">//, typename Node::iterator or typename Node::const_iterator</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">pre_order_descendant_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">pre_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">pre_order_descendant_iterator</span><span class="special">(</span>
+            <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.description"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the descendants of the specified root node in pre-order
+          fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">C</span> <span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">B</span> <span class="identifier">F</span> <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.definition"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/pre_order_desc_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.tpl_param"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.model_of"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.public_bases"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.members"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_descendant_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">explicit</span> <span class="identifier">pre_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_desc_iterator.html" title="Tree Node Descendant Iterator"><span class="bold"><strong>Tree Node Descendant Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">pre_order_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_descendant_iterator</span><span class="special">(</span>
+    <span class="identifier">pre_order_descendant_iterator</span> <span class="keyword">const</span><span class="special">&</span>
+<span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_descendant_iterator</span><span class="special">&</span>
+    <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">pre_order_descendant_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_descendant_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_descendant_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_desc_iter.non_members"></a><a class="link" href="pre_order_desc_iter.html#tree_node.reference.pre_order_desc_iter.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+        <span class="identifier">make_pre_order_descendant_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">pre_order_descendant_iterator</span></code>
+                    that will iterate through the descendants of the specified node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">pre_order_iterate_descendants</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the descendants of the specified node in pre-order
+                    fashion, passing each element dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">pre_order_descendant_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="pre_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="post_order_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_iterator.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/pre_order_iterator.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,665 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>pre_order_iterator<Node></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="breadth_first_desc_iter.html" title="breadth_first_descendant_iterator<Node>">
+<link rel="next" href="pre_order_desc_iter.html" title="pre_order_descendant_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="breadth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="pre_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.pre_order_iterator"></a><a class="link" href="pre_order_iterator.html" title="pre_order_iterator<Node>"><code class="computeroutput"><span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.synopsis"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="keyword">class</span> <span class="identifier">pre_order_iterator</span>
+      <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_adaptor</span><span class="special"><</span>
+            <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span>
+          <span class="special">,</span> <span class="identifier">Node</span><span class="special">*</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">use_default</span>
+          <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">forward_traversal_tag</span>
+        <span class="special">></span>
+    <span class="special">{</span>
+
+     <span class="keyword">public</span><span class="special">:</span>
+        <span class="identifier">pre_order_iterator</span><span class="special">();</span>
+
+        <span class="keyword">explicit</span> <span class="identifier">pre_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+        <span class="identifier">pre_order_iterator</span><span class="special">(</span>
+            <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">other</span>
+        <span class="special">);</span>
+
+        <span class="keyword">operator</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tree_node</span><span class="special">::</span><span class="identifier">traversal_state</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+    <span class="special">};</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.description"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This iterator traverses the specified root node and all its descendants
+          in pre-order fashion, e.g. given the following tree representation:
+        </p>
+<p>
+</p>
+<pre class="programlisting">      <span class="identifier">A</span>
+      <span class="special">|</span>
+  <span class="identifier">C</span><span class="special">---+---</span><span class="identifier">B</span>
+  <span class="special">|</span>       <span class="special">|</span>
+<span class="special">+-+-+</span>   <span class="special">+-+-+</span>
+<span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>   <span class="special">|</span>
+<span class="identifier">D</span>   <span class="identifier">E</span>   <span class="identifier">F</span>   <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+<p>
+          This iterator will traverse the tree nodes in the following order:
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">A</span> <span class="identifier">C</span> <span class="identifier">D</span> <span class="identifier">E</span> <span class="identifier">B</span> <span class="identifier">F</span> <span class="identifier">G</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.definition"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/pre_order_iterator.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.tpl_param"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Node</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The type of a tree node.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept, but it can be
+                    <code class="computeroutput"><span class="keyword">const</span></code>-qualified.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.model_of"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+<span class="special">*</span> Default Constructible
+<span class="special">*</span> Copy Constructible
+<span class="special">*</span> Assignable
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.public_bases"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.members"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Expression
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Where defined
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Value type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">value_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Reference type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">reference</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Distance type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">difference_type</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iterator category
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">iterator_category</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Default constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_iterator</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Default Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Constructor from node
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">explicit</span> <span class="identifier">pre_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/full_tree_node_iterator.html" title="Full Tree Node Iterator"><span class="bold"><strong>Full Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Conversion constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">N</span><span class="special">></span>
+<span class="identifier">pre_order_iterator</span><span class="special">(</span><span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">pre_order_iterator</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_iterator</span><span class="special">(</span><span class="identifier">pre_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Copy Constructible
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">pre_order_iterator</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Assignable
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Dereference operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">reference</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Indirection operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="keyword">operator</span><span class="special">->()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pre-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Post-increment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pre_order_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Forward Iterator
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Traversal state conversion operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">operator</span> <a class="link" href="traversal_state.html" title="traversal_state">traversal_state</a><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <a class="link" href="../concepts/tree_node_iterator.html" title="Tree Node Iterator"><span class="bold"><strong>Tree Node Iterator</strong></span></a>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.pre_order_iterator.non_members"></a><a class="link" href="pre_order_iterator.html#tree_node.reference.pre_order_iterator.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Iterator creation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">></span>
+    <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node</span><span class="special">></span> <span class="identifier">make_pre_order_iterator</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Constructs and returns a <code class="computeroutput"><span class="identifier">pre_order_iterator</span></code>
+                    that will iterate through the specified node and its descendants.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Iteration
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UnaryFunction</span><span class="special">></span>
+    <span class="keyword">void</span> <span class="identifier">pre_order_iterate</span><span class="special">(</span><span class="identifier">Node</span><span class="special">&</span> <span class="identifier">node</span><span class="special">,</span> <span class="identifier">UnaryFunction</span> <span class="identifier">function</span><span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Iterates through the specified node and its descendants in pre-order
+                    fashion, passing each node pointer dereferenced to the specified
+                    Unary Function object.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Equality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">==(</span>
+            <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Inequality
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Node1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Node2</span><span class="special">></span>
+    <span class="keyword">bool</span>
+        <span class="keyword">operator</span><span class="special">!=(</span>
+            <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node1</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">lhs</span>
+          <span class="special">,</span> <span class="identifier">pre_order_iterator</span><span class="special"><</span><span class="identifier">Node2</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span>
+        <span class="special">);</span>
+
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Input Iterator concept.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="breadth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="pre_order_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/traversal_state.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/traversal_state.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,86 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>traversal_state</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="depth_first_desc_iter.html" title="depth_first_descendant_iterator<Node>">
+<link rel="next" href="dereference_iterator.html" title="dereference_iterator()">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="depth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dereference_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.traversal_state"></a><a class="link" href="traversal_state.html" title="traversal_state"><code class="computeroutput"><span class="identifier">traversal_state</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.traversal_state.synopsis"></a><a class="link" href="traversal_state.html#tree_node.reference.traversal_state.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">enum</span> <span class="identifier">traversal_state</span>
+    <span class="special">{</span>
+        <span class="identifier">no_traversal</span>
+      <span class="special">,</span> <span class="identifier">pre_order_traversal</span>
+      <span class="special">,</span> <span class="identifier">post_order_traversal</span>
+      <span class="special">,</span> <span class="identifier">breadth_first_traversal</span>
+      <span class="special">,</span> <span class="identifier">in_order_traversal</span>
+    <span class="special">};</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.traversal_state.description"></a><a class="link" href="traversal_state.html#tree_node.reference.traversal_state.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This enumeration type is the return type of the dereferenceability expression
+          defined by each iterator type that this library provides. The <code class="computeroutput"><span class="identifier">no_traversal</span></code> value corresponds to <code class="computeroutput"><span class="keyword">false</span></code> in a boolean context, enabling the
+          iterator types to fulfill their runtime requirements for dereferenceability.
+          The <code class="computeroutput"><span class="identifier">pre_order_traversal</span></code>
+          and <code class="computeroutput"><span class="identifier">post_order_traversal</span></code>
+          values are significant because the <a class="link" href="depth_first_iterator.html" title="depth_first_iterator<Node>"><code class="computeroutput"><span class="identifier">depth_first_iterator</span></code></a> traverses
+          each node twice, so algorithms must be able to distinguish which state
+          the iterator is in when it traverses a tree node. The <code class="computeroutput"><span class="identifier">breadth_first_traversal</span></code>
+          and <code class="computeroutput"><span class="identifier">in_order_traversal</span></code>
+          values are defined for completeness.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.traversal_state.definition"></a><a class="link" href="traversal_state.html#tree_node.reference.traversal_state.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/traversal_state.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="depth_first_desc_iter.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dereference_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/tree_node_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/tree_node_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,560 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tree_node_base<Derived></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_red_black_flag_gen.html" title="with_red_black_flag_gen<BaseGenerator>">
+<link rel="next" href="breadth_first_iterator.html" title="breadth_first_iterator<Node>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_red_black_flag_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="breadth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.tree_node_base"></a><a class="link" href="tree_node_base.html" title="tree_node_base<Derived>"><code class="computeroutput"><span class="identifier">tree_node_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.tree_node_base.description"></a><a class="link" href="tree_node_base.html#tree_node.reference.tree_node_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          All models of the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept that this library
+          provides either inherit from this type or declare it as a <code class="computeroutput"><span class="keyword">friend</span> <span class="keyword">struct</span></code>
+          if they override any of its implementation methods.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.tree_node_base.definition"></a><a class="link" href="tree_node_base.html#tree_node.reference.tree_node_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/base.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.tree_node_base.tpl_param"></a><a class="link" href="tree_node_base.html#tree_node.reference.tree_node_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.tree_node_base.public_bases"></a><a class="link" href="tree_node_base.html#tree_node.reference.tree_node_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+          None.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.tree_node_base.members"></a><a class="link" href="tree_node_base.html#tree_node.reference.tree_node_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Pointer type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="identifier">Derived</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Pointer-to-const type
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">typedef</span> <span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">const_pointer</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_pointer</span> <span class="identifier">get_derived</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">this</span></code> as
+                    the derived type.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">pointer</span> <span class="identifier">get_derived</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">this</span></code> as
+                    the derived type.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Insertion notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">on_post_inserted_impl</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">position</span><span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method if they store iterators
+                    that will remain valid even if any of the siblings of the pointees
+                    are removed. The overriding implementation should simply store
+                    the specified position. Does nothing by default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Insertion notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span>
+<span class="keyword">void</span> <span class="identifier">on_post_inserted_impl</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">position</span><span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method if they store iterators
+                    that may become invalidated if any of the siblings of the pointees
+                    are removed. The overriding implementation should validate the
+                    positions of the siblings as well as its own. Does nothing by
+                    default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Insertion notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BooleanIntegralConstant</span><span class="special">></span>
+<span class="keyword">void</span>
+    <span class="identifier">on_post_inserted</span><span class="special">(</span>
+        <span class="identifier">Iterator</span> <span class="identifier">position</span>
+      <span class="special">,</span> <span class="identifier">BooleanIntegralConstant</span> <span class="identifier">invalidates_sibling_positions</span>
+    <span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should invoke this method on their child nodes
+                    after they are stored, or on the siblings of those child nodes
+                    after they are removed. Calls the corresponding implementation
+                    method.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Erasure notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_erase_impl</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method after one or more
+                    of the tree node's children are removed. Does nothing by default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Erasure notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_erase</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should invoke this method after one or more of
+                    the tree node's children are removed. Calls the corresponding
+                    implementation method.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Clear notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_clear_impl</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method after all of the tree
+                    node's children are removed. Does nothing by default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Clear notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_clear</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should invoke this method after all of the tree
+                    node's children are removed. Calls the corresponding implementation
+                    method.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left rotation notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_rotate_left_impl</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method after the tree node
+                    is rotate left. Does nothing by default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Left rotation notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_rotate_left</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should invoke this method after the tree node
+                    is rotated left. Calls the corresponding implementation method.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right rotation notification implementation
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_rotate_right_impl</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should override this method after the tree node
+                    is rotate right. Does nothing by default.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Right rotation notification
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">on_post_rotate_right</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Subclass types should invoke this method after the tree node
+                    is rotated right. Calls the corresponding implementation method.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_red_black_flag_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="breadth_first_iterator.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,368 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_count<BaseGenerator,T1,T2,Count></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="associative_node_gen.html" title="associative_node_gen<Selector>">
+<link rel="next" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_count"></a><a class="link" href="with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.description"></a><a class="link" href="with_count.html#tree_node.reference.with_count.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <span class="bold"><strong>count</strong></span> of a tree node can be defined
+          as the number of itself plus its descendants. In addition to the operations
+          it inherits from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          this <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> adaptor provides constant-time access to the count
+          of the node by updating this information after structural modifications
+          have been performed.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.definition"></a><a class="link" href="with_count.html#tree_node.reference.with_count.definition" title="Where defined">Where defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_count.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.tpl_param"></a><a class="link" href="with_count.html#tree_node.reference.with_count.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_count</span></code>
+                    will ultimately inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is not <code class="computeroutput"><span class="keyword">void</span></code>; the
+                    data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if not <code class="computeroutput"><span class="keyword">void</span></code>;
+                    ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Count</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The count type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.model_of"></a><a class="link" href="with_count.html#tree_node.reference.with_count.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="error">`</span><span class="keyword">void</span><span class="error">`</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.public_bases"></a><a class="link" href="with_count.html#tree_node.reference.with_count.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">with_count_base</span><span class="special"><</span>
+    <span class="identifier">with_count</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">BaseGenerator</span>
+  <span class="special">,</span> <span class="identifier">T1</span>
+  <span class="special">,</span> <span class="identifier">T2</span>
+  <span class="special">,</span> <span class="identifier">Count</span>
+<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.members"></a><a class="link" href="with_count.html#tree_node.reference.with_count.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count</span><span class="special">(</span><span class="identifier">with_count</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count</span><span class="special">(</span><span class="identifier">with_count</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_count</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_count</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_count</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Count access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Count</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_count</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the count of this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count.non_members"></a><a class="link" href="with_count.html#tree_node.reference.with_count.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="associative_node_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,364 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_count_base<Derived,BaseGenerator,T1,T2,Count></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_count.html" title="with_count<BaseGenerator,T1,T2,Count>">
+<link rel="next" href="with_count_gen.html" title="with_count_gen<BaseGenerator>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_count_base"></a><a class="link" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.description"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="with_count.html" title="with_count<BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count</span></code></a> class template is meant
+          to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">with_count_base</span></code>
+          is more suitable as a base class template from which other <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="with_count_gen.html" title="with_count_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_count_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.definition"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_count.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.tpl_param"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_count_base</span></code>
+                    will inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is not <code class="computeroutput"><span class="keyword">void</span></code>; the
+                    data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if not <code class="computeroutput"><span class="keyword">void</span></code>;
+                    ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Count</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The count type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.model_of"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="error">`</span><span class="keyword">void</span><span class="error">`</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.public_bases"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special"><</span>
+    <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap3</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+<span class="special">>::</span><span class="identifier">type</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.members"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_count_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_count_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Count access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Count</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_count</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the height of this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_base.non_members"></a><a class="link" href="with_count_base.html#tree_node.reference.with_count_base.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_count_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_count_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,214 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_count_gen<BaseGenerator></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>">
+<link rel="next" href="with_height.html" title="with_height<BaseGenerator,T1,T2,Height>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_count_gen"></a><a class="link" href="with_count_gen.html" title="with_count_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_count_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.synopsis"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BaseGenerator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Count</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">with_count_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">with_count_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.description"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.definition"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_count.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.model_of"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.tpl_param"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <a class="link" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a> will
+                    inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Count</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The count type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.expressions"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>"><code class="computeroutput"><span class="identifier">with_count_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">Key</span></code> be the key type. Let <code class="computeroutput"><span class="identifier">Data</span></code> be the data type. Let <code class="computeroutput"><span class="identifier">BaseGenerator</span></code> be a valid first template
+          argument for <code class="computeroutput"><span class="identifier">with_count_gen</span></code>.
+          Let <code class="computeroutput"><span class="identifier">Count</span></code> be the count
+          type.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap3<span class="special"><</span>
+    <span class="identifier">with_count_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>">with_count_base</a><Derived,BaseGenerator,Key,Data,Count></code>
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span>
+    <span class="identifier">with_count_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Count</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_count_base.html" title="with_count_base<Derived,BaseGenerator,T1,T2,Count>">with_count_base</a><Derived,BaseGenerator,Data,void,Count></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_count_gen.complexity"></a><a class="link" href="with_count_gen.html#tree_node.reference.with_count_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,369 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_height<BaseGenerator,T1,T2,Height></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_count_gen.html" title="with_count_gen<BaseGenerator>">
+<link rel="next" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_height"></a><a class="link" href="with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.description"></a><a class="link" href="with_height.html#tree_node.reference.with_height.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <span class="bold"><strong>height</strong></span> of a tree node can be defined
+          as the magnitude of the difference between its ply and that of its deepest
+          descendant. In addition to the operations it inherits from the return type
+          of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>, this
+          <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> adaptor provides constant-time access to the height
+          of the node by updating this information after structural modifications
+          have been performed.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.definition"></a><a class="link" href="with_height.html#tree_node.reference.with_height.definition" title="Where defined">Where defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_height.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.tpl_param"></a><a class="link" href="with_height.html#tree_node.reference.with_height.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_height</span></code>
+                    will ultimately inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is not <code class="computeroutput"><span class="keyword">void</span></code>; the
+                    data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if not <code class="computeroutput"><span class="keyword">void</span></code>;
+                    ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Height</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The height type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.model_of"></a><a class="link" href="with_height.html#tree_node.reference.with_height.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="error">`</span><span class="keyword">void</span><span class="error">`</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.public_bases"></a><a class="link" href="with_height.html#tree_node.reference.with_height.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">with_height_base</span><span class="special"><</span>
+    <span class="identifier">with_height</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">BaseGenerator</span>
+  <span class="special">,</span> <span class="identifier">T1</span>
+  <span class="special">,</span> <span class="identifier">T2</span>
+  <span class="special">,</span> <span class="identifier">Height</span>
+<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.members"></a><a class="link" href="with_height.html#tree_node.reference.with_height.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height</span><span class="special">(</span><span class="identifier">with_height</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height</span><span class="special">(</span><span class="identifier">with_height</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_height</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_height</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_height</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Height access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Height</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_height</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the height of this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height.non_members"></a><a class="link" href="with_height.html#tree_node.reference.with_height.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_count_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,364 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_height_base<Derived,BaseGenerator,T1,T2,Height></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_height.html" title="with_height<BaseGenerator,T1,T2,Height>">
+<link rel="next" href="with_height_gen.html" title="with_height_gen<BaseGenerator>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_height_base"></a><a class="link" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span></code> </a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.description"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="with_height.html" title="with_height<BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height</span></code></a> class template is
+          meant to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">with_height_base</span></code>
+          is more suitable as a base class template from which other <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="with_height_gen.html" title="with_height_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_height_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.definition"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_height.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.tpl_param"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_height_base</span></code>
+                    will inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is not <code class="computeroutput"><span class="keyword">void</span></code>; the
+                    data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if not <code class="computeroutput"><span class="keyword">void</span></code>;
+                    ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Height</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The height type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.model_of"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="keyword">not</span> <span class="error">`</span><span class="keyword">void</span><span class="error">`</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.public_bases"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special"><</span>
+    <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap3</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+<span class="special">>::</span><span class="identifier">type</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.members"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_height_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_height_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Height access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Height</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_height</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the height of this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_base.non_members"></a><a class="link" href="with_height_base.html#tree_node.reference.with_height_base.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_height_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_height_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,214 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_height_gen<BaseGenerator></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>">
+<link rel="next" href="with_position.html" title="with_position<BaseGenerator,T1,T2>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_height_gen"></a><a class="link" href="with_height_gen.html" title="with_height_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_height_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.synopsis"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BaseGenerator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Height</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">with_height_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">with_height_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.description"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.definition"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_height.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.model_of"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.tpl_param"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <a class="link" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a> will
+                    inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Height</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The height type.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.expressions"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>"><code class="computeroutput"><span class="identifier">with_height_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">Key</span></code> be the key type. Let <code class="computeroutput"><span class="identifier">Data</span></code> be the data type. Let <code class="computeroutput"><span class="identifier">BaseGenerator</span></code> be a valid first template
+          argument for <code class="computeroutput"><span class="identifier">with_height_gen</span></code>.
+          Let <code class="computeroutput"><span class="identifier">Height</span></code> be the height
+          type.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap3<span class="special"><</span>
+    <span class="identifier">with_height_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>">with_height_base</a><Derived,BaseGenerator,Key,Data,Height></code>
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span>
+    <span class="identifier">with_height_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Height</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_height_base.html" title="with_height_base<Derived,BaseGenerator,T1,T2,Height>">with_height_base</a><Derived,BaseGenerator,Data,void,Height></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_height_gen.complexity"></a><a class="link" href="with_height_gen.html#tree_node.reference.with_height_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,364 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_position<BaseGenerator,T1,T2></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_height_gen.html" title="with_height_gen<BaseGenerator>">
+<link rel="next" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_position"></a><a class="link" href="with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.description"></a><a class="link" href="with_position.html#tree_node.reference.with_position.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          This <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree
+          Node</strong></span></a> adaptor provides access to its position in its parent's
+          range of children as well as the other operations it inherits from the
+          return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.definition"></a><a class="link" href="with_position.html#tree_node.reference.with_position.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_position.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.tpl_param"></a><a class="link" href="with_position.html#tree_node.reference.with_position.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_position</span></code>
+                    will ultimately inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is specified; the data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if specified; ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.model_of"></a><a class="link" href="with_position.html#tree_node.reference.with_position.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="identifier">specified</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.public_bases"></a><a class="link" href="with_position.html#tree_node.reference.with_position.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">with_position_base</span><span class="special"><</span>
+    <span class="identifier">with_position</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">BaseGenerator</span>
+  <span class="special">,</span> <span class="identifier">T1</span>
+  <span class="special">,</span> <span class="identifier">T2</span>
+<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.members"></a><a class="link" href="with_position.html#tree_node.reference.with_position.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position</span><span class="special">(</span><span class="identifier">with_position</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position</span><span class="special">(</span><span class="identifier">with_position</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_position</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_position</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_position</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Position access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">get_position</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the immutable iterator that points to this tree node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Position access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">get_position</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the iterator that points to this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position.non_members"></a><a class="link" href="with_position.html#tree_node.reference.with_position.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_height_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,374 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_position_base<Derived,BaseGenerator,T1,T2></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_position.html" title="with_position<BaseGenerator,T1,T2>">
+<link rel="next" href="with_position_gen.html" title="with_position_gen<BaseGenerator>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_position_base"></a><a class="link" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.description"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="with_position.html" title="with_position<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position</span></code></a> class template is
+          meant to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">with_position_base</span></code>
+          is more suitable as a base class template from which other <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="with_position_gen.html" title="with_position_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_position_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.definition"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_position.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.tpl_param"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_position_base</span></code>
+                    will inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is specified; the data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if specified; ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.model_of"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="identifier">specified</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.public_bases"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special"><</span>
+    <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap3</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+<span class="special">>::</span><span class="identifier">type</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.members"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_position_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_position_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Position access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">get_position</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the immutable iterator that points to this tree node.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Position access
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">get_position</span><span class="special">();</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns the iterator that points to this tree node.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_base.non_members"></a><a class="link" href="with_position_base.html#tree_node.reference.with_position_base.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_position_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_position_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_position_gen<BaseGenerator></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>">
+<link rel="next" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_rb_flag.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_position_gen"></a><a class="link" href="with_position_gen.html" title="with_position_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_position_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.description"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.definition"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_position.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.model_of"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.tpl_param"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <a class="link" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a> will
+                    inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.expressions"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_position_base</span></code></a>. Let <code class="computeroutput"><span class="identifier">Key</span></code> be the key type. Let <code class="computeroutput"><span class="identifier">Data</span></code> be the data type. Let <code class="computeroutput"><span class="identifier">BaseGenerator</span></code> be a valid <code class="computeroutput"><span class="identifier">with_position_gen</span></code> template argument.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap3<span class="special"><</span>
+    <span class="identifier">with_position_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>">with_position_base</a><Derived,BaseGenerator,Key,Data></code>
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span>
+    <span class="identifier">with_position_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_position_base.html" title="with_position_base<Derived,BaseGenerator,T1,T2>">with_position_base</a><Derived,BaseGenerator,Data,void></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_position_gen.complexity"></a><a class="link" href="with_position_gen.html#tree_node.reference.with_position_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_rb_flag.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,389 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_red_black_flag<BaseGenerator,T1,T2></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_position_gen.html" title="with_position_gen<BaseGenerator>">
+<link rel="next" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_rb_flag_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_rb_flag"></a><a class="link" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.description"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          In addition to the other operations it inherits from the return type of
+          <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>, this <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a>
+          adaptor provides access to a flag that indicates whether the node is red
+          or black.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.definition"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_red_black_flag.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.tpl_param"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_position</span></code>
+                    will ultimately inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is specified; the data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if specified; ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.model_of"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.model_of" title="Model of">Model of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="identifier">specified</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.public_bases"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">with_red_black_flag_base</span><span class="special"><</span>
+    <span class="identifier">with_red_black_flag</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">BaseGenerator</span>
+  <span class="special">,</span> <span class="identifier">T1</span>
+  <span class="special">,</span> <span class="identifier">T2</span>
+<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.members"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.members" title="Public Members">Public Members</a>
+</h4></div></div></div>
+<p>
+          In addition to those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>,
+          the following members are defined:
+        </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag</span><span class="special">(</span><span class="identifier">with_red_black_flag</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Copy Constructible concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag</span><span class="special">(</span><span class="identifier">with_red_black_flag</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_red_black_flag</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Copy assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_red_black_flag</span> <span class="keyword">const</span><span class="special">&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Assignable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Move assignment operator
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">with_red_black_flag</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the Movable concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Red flag query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">is_red</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">true</span></code> if
+                    the flag is set to red, <code class="computeroutput"><span class="keyword">false</span></code>
+                    if it is set to black.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Black flag query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">is_black</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">true</span></code> if
+                    the flag is set to black, <code class="computeroutput"><span class="keyword">false</span></code>
+                    if it is set to red.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Red flag setting
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">set_red_flag</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">flag</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Sets the flag to red if the argument evaluates to <code class="computeroutput"><span class="keyword">true</span></code>; sets the flag to black if
+                    the argument evaluates to <code class="computeroutput"><span class="keyword">false</span></code>.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag.non_members"></a><a class="link" href="with_rb_flag.html#tree_node.reference.with_rb_flag.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_position_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_rb_flag_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag_base.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_rb_flag_base.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,401 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_red_black_flag_base<Derived,BaseGenerator,T1,T2></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>">
+<link rel="next" href="with_red_black_flag_gen.html" title="with_red_black_flag_gen<BaseGenerator>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_rb_flag.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_red_black_flag_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_rb_flag_base"></a><a class="link" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span></code> </a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.description"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          The <a class="link" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span></code></a>
+          class template inherits its functionality from this class template. They
+          differ only with regard to template parameters: the <a class="link" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag</span></code></a> class template
+          is meant to be used directly as a data structure, while <code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code>
+          is more suitable as a base class template from which other <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> adaptor class templates can derive
+          via the <a class="link" href="with_rb_flag.html" title="with_red_black_flag<BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span></code></a> <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.definition"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_red_black_flag.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.tpl_param"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">Derived</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The most descendant type that will inherit from this one.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code>
+                    will inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T1</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The key type if <code class="computeroutput"><span class="identifier">T2</span></code>
+                    is specified; the data type otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">T2</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The data type if specified; ignored otherwise.
+                  </p>
+                </td>
+<td>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">void</span></code>
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.model_of"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="../concepts/associative_tree_node.html" title="Associative Tree Node"><span class="bold"><strong>Associative Tree Node</strong></span></a> <span class="keyword">if</span> <span class="error">`</span><span class="identifier">T2</span><span class="error">`</span> <span class="identifier">is</span> <span class="identifier">specified</span><span class="special">;</span>
+  <a class="link" href="../concepts/non_assoc_tree_node.html" title="Non-Associative Tree Node"><span class="bold"><strong>Non-Associative Tree Node</strong></span></a> <span class="identifier">otherwise</span>
+<span class="special">*</span> <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a>
+<span class="special">*</span> <span class="identifier">any</span> <span class="identifier">other</span> <span class="identifier">concept</span> <span class="identifier">that</span> <span class="identifier">the</span> <span class="keyword">return</span> <span class="identifier">type</span> <span class="identifier">of</span> <span class="error">`</span><span class="identifier">BaseGenerator</span><span class="error">`</span> <span class="identifier">models</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.public_bases"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.public_bases" title="Public Base Classes">Public
+        Base Classes</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special"><</span>
+    <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special"><</span><span class="identifier">T2</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">></span>
+  <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap3</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span>
+<span class="special">>::</span><span class="identifier">type</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.members"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.members" title="Members">Members</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Name
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Definition
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Scope
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+                  <p>
+                    Derived copy constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag_base</span><span class="special">(</span><span class="identifier">Derived</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">copy</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Derived move constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">with_red_black_flag_base</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">&&);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/base_tree_node.html" title="Base Tree Node"><span class="bold"><strong>Base Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Emplacement constructor
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span>
+<span class="keyword">explicit</span> <span class="identifier">with_red_black_flag_base</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&&</span> <span class="special">...</span><span class="identifier">args</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">protected</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Defined by the <a class="link" href="../concepts/tree_node.html" title="Tree Node"><span class="bold"><strong>Tree Node</strong></span></a> concept.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Red flag query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">is_red</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">true</span></code> if
+                    the flag is set to red, <code class="computeroutput"><span class="keyword">false</span></code>
+                    if it is set to black.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Black flag query
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">is_black</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Returns <code class="computeroutput"><span class="keyword">true</span></code> if
+                    the flag is set to black, <code class="computeroutput"><span class="keyword">false</span></code>
+                    if it is set to red.
+                  </p>
+                </td>
+</tr>
+<tr>
+<td>
+                  <p>
+                    Red flag setting
+                  </p>
+                </td>
+<td>
+                  <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">set_red_flag</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">flag</span><span class="special">);</span>
+</pre>
+<p>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="keyword">public</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    Sets the flag to red if the argument evaluates to <code class="computeroutput"><span class="keyword">true</span></code>; sets the flag to black if
+                    the argument evaluates to <code class="computeroutput"><span class="keyword">false</span></code>.
+                  </p>
+                </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_rb_flag_base.non_members"></a><a class="link" href="with_rb_flag_base.html#tree_node.reference.with_rb_flag_base.non_members" title="Non-members">Non-members</a>
+</h4></div></div></div>
+<p>
+          None beyond those inherited from the return type of <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_rb_flag.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="with_red_black_flag_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_red_black_flag_gen.html
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/html/tree_node/reference/with_red_black_flag_gen.html	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,195 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>with_red_black_flag_gen<BaseGenerator></title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. tree_node 0.4">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>">
+<link rel="next" href="tree_node_base.html" title="tree_node_base<Derived>">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_rb_flag_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen"></a><a class="link" href="with_red_black_flag_gen.html" title="with_red_black_flag_gen<BaseGenerator>"><code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.synopsis"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tree_node</span> <span class="special">{</span>
+
+    <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">BaseGenerator</span><span class="special">></span>
+    <span class="keyword">struct</span> <span class="identifier">with_red_black_flag_gen</span>
+    <span class="special">{</span>
+        <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span>
+        <span class="keyword">struct</span> <span class="identifier">apply</span>
+        <span class="special">{</span>
+            <span class="keyword">typedef</span> <span class="identifier">with_red_black_flag_base</span><span class="special"><</span><span class="identifier">Derived</span><span class="special">,</span><span class="identifier">BaseGenerator</span><span class="special">,</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">></span> <span class="identifier">type</span><span class="special">;</span>
+        <span class="special">};</span>
+    <span class="special">};</span>
+<span class="special">}}</span>  <span class="comment">// namespace boost::tree_node</span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.description"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+          TODO.
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.definition"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.definition" title="Where defined">Where
+        defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span>boost/tree_node/with_red_black_flag.hpp<span class="special">></span>
+</pre>
+<p>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.model_of"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.model_of" title="Model of">Model
+        of</a>
+</h4></div></div></div>
+<p>
+          <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type
+          Generator</strong></span></a>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.tpl_param"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.tpl_param" title="Template Parameters">Template
+        Parameters</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+                  <p>
+                    Parameter
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Description
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Requirements
+                  </p>
+                </th>
+<th>
+                  <p>
+                    Default
+                  </p>
+                </th>
+</tr></thead>
+<tbody><tr>
+<td>
+                  <p>
+                    <code class="computeroutput"><span class="identifier">BaseGenerator</span></code>
+                  </p>
+                </td>
+<td>
+                  <p>
+                    The Metafunction Class from whose
+                    return type <a class="link" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a>
+                    will inherit.
+                  </p>
+                </td>
+<td>
+                  <p>
+                    It must model the <a class="link" href="../concepts/type_generator.html" title="Type Generator"><span class="bold"><strong>Type Generator</strong></span></a> concept.
+                  </p>
+                </td>
+<td>
+                </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.expressions"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.expressions" title="Expression Semantics">Expression
+        Semantics</a>
+</h4></div></div></div>
+<p>
+          Let <code class="computeroutput"><span class="identifier">Derived</span></code> be the type
+          that will inherit from <a class="link" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>"><code class="computeroutput"><span class="identifier">with_red_black_flag_base</span></code></a>. Let
+          <code class="computeroutput"><span class="identifier">Key</span></code> be the key type. Let
+          <code class="computeroutput"><span class="identifier">Data</span></code> be the data type.
+          Let <code class="computeroutput"><span class="identifier">BaseGenerator</span></code> be a
+          valid <code class="computeroutput"><span class="identifier">with_red_black_flag_gen</span></code>
+          template argument.
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap3<span class="special"><</span>
+    <span class="identifier">with_red_black_flag_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Key</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>">with_red_black_flag_base</a><Derived,BaseGenerator,Key,Data></code>
+        </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> boost::mpl::apply_wrap2<span class="special"><</span>
+    <span class="identifier">with_red_black_flag_gen</span><span class="special"><</span><span class="identifier">BaseGenerator</span><span class="special">></span>
+  <span class="special">,</span> <span class="identifier">Derived</span>
+  <span class="special">,</span> <span class="identifier">Data</span>
+<span class="special">>::</span><span class="identifier">type</span> <span class="identifier">r</span><span class="special">;</span>
+</pre>
+<p>
+        </p>
+<p>
+          <span class="bold"><strong>Return type:</strong></span> <code class="literal"><a class="link" href="with_rb_flag_base.html" title="with_red_black_flag_base<Derived,BaseGenerator,T1,T2>">with_red_black_flag_base</a><Derived,BaseGenerator,Data,void></code>
+        </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="tree_node.reference.with_red_black_flag_gen.complexity"></a><a class="link" href="with_red_black_flag_gen.html#tree_node.reference.with_red_black_flag_gen.complexity" title="Complexity">Complexity</a>
+</h4></div></div></div>
+<p>
+          Compile time.
+        </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2011, 2012 Cromwell D. Enage<p>
+        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)
+      </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="with_rb_flag_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tree_node_base.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Added: sandbox/tree_node/libs/tree_node/doc/ref_associative_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_associative_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,242 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:associative_node `associative_node<Key,Data,Selector>`]
+
+[section Description]
+This class template is suitable for classes or algorithms that need to map keys
+to child nodes in a tree node data structure.  Objects of this type can be
+stored by value, and their children can be accessed by their associated keys
+for fast lookup.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_associative_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Key`]
+        [
+            The type of a key object to be associated with a child of a
+            `associative_node`.
+        ]
+        []
+        []
+    ]
+    [
+        [`Data`]
+        [The type of the object to be stored in a `associative_node`.]
+        []
+        []
+    ]
+    [
+        [`Selector`]
+        [The type that determines the child container type.]
+        [
+          * [^_is_recursive_selector_<Selector>] must return __mpl_true__.
+          * [^_is_associative_selector_<Selector>] must return __mpl_true__.
+        ]
+        [__ptr_mapS__]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__
+  * __Default_Constructible__ if `Data` is __Default_Constructible__
+  * __Copy_Constructible__ if `Data` is __Copy_Constructible__
+  * __Assignable__ if `Data` is __Copy_Constructible__ and __Movable__
+  * __Movable__ if `Data` is __Movable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__associative_node__bases]
+[endsect]
+
+[section:members Public Members]
+Given:
+[reference__associative_node__super_t]
+[table
+    [[Name][Definition][Where defined]]
+    [
+        [
+            Key type, data type, iterator range type,
+            immutable iterator range type
+        ]
+        [[reference__associative_node__traits]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__associative_node__pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__associative_node__const_pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__associative_node__iterator]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__associative_node__const_iterator]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Copy constructor]
+        [``
+            associative_node(associative_node const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Move constructor]
+        [``
+            associative_node(associative_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__associative_node__emplacement_ctor]]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            associative_node& operator=(associative_node const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            associative_node& operator=(associative_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Data access]
+        [[reference__associative_node_base__get_data__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__associative_node_base__get_data]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__associative_node_base__get_parent_ptr__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__associative_node_base__get_parent_ptr]]
+        [__Tree_Node__]
+    ]
+    [
+        [Child creation]
+        [[reference__associative_node_base__emplace]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child copy creation]
+        [``
+            iterator
+                insert(
+                    typename traits::key_type const& key
+                  , associative_node const& child
+                );
+        ``]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__associative_node_base__begin__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__associative_node_base__begin]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__associative_node_base__end__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__associative_node_base__end]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__associative_node_base__size]]
+        [__Tree_Node__]
+    ]
+    [
+        [Child search]
+        [[reference__associative_node_base__find__const]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search]
+        [[reference__associative_node_base__find]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search range]
+        [[reference__associative_node_base__equal_range__const]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search range]
+        [[reference__associative_node_base__equal_range]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Remove children]
+        [[reference__associative_node_base__erase]]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__associative_node_base__empty]]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__associative_node_base__clear]]
+        [__Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[section Example]
+<__example_associative_node_cpp__>
+[endsect]
+
+[section Test]
+<__test_associative_node_cpp__>
+[endsect]
+
+[endsect] [/ associative_node]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_associative_node_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_associative_node_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,277 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:associative_node_base
+    `associative_node_base<Derived,Key,Data,Selector>`
+]
+
+[section Description]
+The __associative_node__ class template inherits its functionality from this
+class template.  They differ only with regard to template parameters: the
+__associative_node__ class template is meant to be used directly as a data
+structure, while `associative_node_base` is more suitable as a base class
+template from which __Tree_Node__ adaptor class templates can derive via the
+__associative_node_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_associative_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`Key`]
+        [The key type.]
+        []
+        []
+    ]
+    [
+        [`Data`]
+        [The data type.]
+        []
+        []
+    ]
+    [
+        [`Selector`]
+        [The type that determines the child container type.]
+        [
+          * [^_is_recursive_selector_<Selector>] must return __mpl_true__.
+          * [^_is_associative_selector_<Selector>] must return __mpl_true__.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__
+  * __Base_Tree_Node__
+  * __Default_Constructible__ if `Data` is __Default_Constructible__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__associative_node_base__bases]
+[endsect]
+
+[section:members Members]
+[table
+    [[Name][Definition][Scope][Where defined]]
+    [
+        [
+            Key type, data type, iterator range type,
+            immutable iterator range type
+        ]
+        [[reference__associative_node_base__traits]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__associative_node_base__pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__associative_node_base__const_pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__associative_node_base__iterator]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__associative_node_base__const_iterator]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Derived copy constructor]
+        [[reference__associative_node_base__derived_copy_ctor]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            associative_node_base(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__associative_node_base__emplacement_ctor]]
+        [`protected`]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy or move notification]
+        [[reference__associative_node_base__on_post_copy_or_move]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived copy assignment]
+        [[reference__associative_node_base__copy_assign]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived move assignment]
+        [``
+            Derived& operator=(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__associative_node_base__get_data__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__associative_node_base__get_data]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__associative_node_base__get_parent_ptr__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__associative_node_base__get_parent_ptr]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Child creation]
+        [[reference__associative_node_base__emplace]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child copy creation]
+        [[reference__associative_node_base__insert]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__associative_node_base__begin__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__associative_node_base__begin]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__associative_node_base__end__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__associative_node_base__end]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__associative_node_base__size]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Child search]
+        [[reference__associative_node_base__find__const]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search]
+        [[reference__associative_node_base__find]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search range]
+        [[reference__associative_node_base__equal_range__const]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Child search range]
+        [[reference__associative_node_base__equal_range]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Remove children]
+        [[reference__associative_node_base__erase]]
+        [`public`]
+        [__Associative_Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__associative_node_base__empty]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__associative_node_base__clear]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            const_pointer get_derived() const;
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            pointer get_derived();
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[endsect] [/ associative_node_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_associative_node_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_associative_node_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,71 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:associative_node_gen `associative_node_gen<Selector>`]
+
+[section Synopsis]
+[reference__associative_node_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_associative_node_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Selector`]
+        [
+            The type that determines the child container type of
+            __associative_node_base__.
+        ]
+        [
+          * [^_is_recursive_selector_<Selector>] must return __mpl_true__.
+          * [^_is_associative_selector_<Selector>] must return __mpl_true__.
+        ]
+        [__ptr_mapS__]
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from __associative_node_base__.
+Let `Key` be the key type.
+Let `Data` be the data type.
+Let `Selector` be a valid `associative_node_gen` template argument.
+
+``
+    typedef _mpl_apply_wrap3_<
+        associative_node_gen<Selector>
+      , Derived
+      , Key
+      , Data
+    >::type r;
+``
+
+[*Return type:] [^_associative_node_base_<Derived,Key,Data,Selector>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ associative_node_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_binary_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_binary_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,242 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:binary_node `binary_node<T>`]
+
+[section Description]
+This class template is suitable for classes or algorithms that require a
+binary tree node data structure.  Objects of this type can be stored by value.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_binary_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`T`]
+        [The type of the object to be stored in a `binary_node`.]
+        []
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Binary_Tree_Node__
+  * __Default_Constructible__ if `T` is __Default_Constructible__
+  * __Copy_Constructible__ if `T` is __Copy_Constructible__
+  * __Assignable__ if `T` is __Copy_Constructible__ and __Movable__
+  * __Movable__ if `T` is __Movable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__binary_node__bases]
+[endsect]
+
+[section:members Public Members]
+Given:
+[reference__binary_node__super_t]
+[table
+    [[Name][Definition][Where defined]]
+    [
+        [Data type]
+        [[reference__binary_node__traits]]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__binary_node__pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__binary_node__const_pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__binary_node__iterator]]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__binary_node__const_iterator]]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Copy constructor]
+        [``
+            binary_node(binary_node const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Move constructor]
+        [``
+            binary_node(binary_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__binary_node__emplacement_ctor]]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            binary_node& operator=(binary_node const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            binary_node& operator=(binary_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Data access]
+        [[reference__binary_node_base__get_data__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__binary_node_base__get_data]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__binary_node_base__get_parent_ptr__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__binary_node_base__get_parent_ptr]]
+        [__Tree_Node__]
+    ]
+    [
+        [Left child creation]
+        [[reference__binary_node_base__emplace_left]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child copy creation]
+        [``
+            iterator insert_left(binary_node const& child);
+        ``]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child creation]
+        [[reference__binary_node_base__emplace_right]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child copy creation]
+        [``
+            iterator insert_right(binary_node const& child);
+        ``]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child access]
+        [[reference__binary_node_base__get_left_child_ptr__const]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child access]
+        [[reference__binary_node_base__get_left_child_ptr]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child access]
+        [[reference__binary_node_base__get_right_child_ptr__const]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child access]
+        [[reference__binary_node_base__get_right_child_ptr]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__binary_node_base__begin__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__binary_node_base__begin]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__binary_node_base__end__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__binary_node_base__end]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__binary_node_base__size]]
+        [__Tree_Node__]
+    ]
+    [
+        [Rotate left]
+        [[reference__binary_node_base__rotate_left]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Rotate right]
+        [[reference__binary_node_base__rotate_right]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Remove left child]
+        [[reference__binary_node_base__erase_left]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Remove right child]
+        [[reference__binary_node_base__erase_right]]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__binary_node_base__empty]]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__binary_node_base__clear]]
+        [__Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[section Example]
+<__example_binary_node_cpp__>
+[endsect]
+
+[section Test]
+<__test_binary_node_cpp__>
+[endsect]
+
+[endsect] [/ binary_node]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_binary_node_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_binary_node_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,287 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:binary_node_base `binary_node_base<Derived,T>`]
+
+[section Description]
+The __binary_node__ class template inherits its functionality from this class
+template.  They differ only with regard to template parameters: the
+__binary_node__ class template is meant to be used directly as a data
+structure, while `binary_node_base` is more suitable as a base class template
+from which __Tree_Node__ adaptor class templates can derive via the
+__binary_node_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_binary_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`T`]
+        [The data type.]
+        []
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Binary_Tree_Node__
+  * __Base_Tree_Node__
+  * __Default_Constructible__ if `T` is __Default_Constructible__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__binary_node_base__bases]
+[endsect]
+
+[section:members Members]
+[table
+    [[Name][Definition][Scope][Where defined]]
+    [
+        [Data type]
+        [[reference__binary_node_base__traits]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__binary_node_base__pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__binary_node_base__const_pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__binary_node_base__iterator]]
+        [`public`]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__binary_node_base__const_iterator]]
+        [`public`]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Derived copy constructor]
+        [[reference__binary_node_base__derived_copy_ctor]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            binary_node_base(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__binary_node_base__emplacement_ctor]]
+        [`protected`]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy or move notification]
+        [[reference__binary_node_base__on_post_copy_or_move]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived copy assignment]
+        [[reference__binary_node_base__copy_assign]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived move assignment]
+        [``
+            void move_assign(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__binary_node_base__get_data__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__binary_node_base__get_data]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__binary_node_base__get_parent_ptr__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__binary_node_base__get_parent_ptr]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Left child creation]
+        [[reference__binary_node_base__emplace_left]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child copy creation]
+        [[reference__binary_node_base__insert_left]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child creation]
+        [[reference__binary_node_base__emplace_right]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child copy creation]
+        [[reference__binary_node_base__insert_right]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child access]
+        [[reference__binary_node_base__get_left_child_ptr__const]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Left child access]
+        [[reference__binary_node_base__get_left_child_ptr]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child access]
+        [[reference__binary_node_base__get_right_child_ptr__const]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Right child access]
+        [[reference__binary_node_base__get_right_child_ptr]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__binary_node_base__begin__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__binary_node_base__begin]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__binary_node_base__end__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__binary_node_base__end]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__binary_node_base__size]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Rotate left]
+        [[reference__binary_node_base__rotate_left]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Rotate right]
+        [[reference__binary_node_base__rotate_right]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Remove left child]
+        [[reference__binary_node_base__erase_left]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Remove right child]
+        [[reference__binary_node_base__erase_right]]
+        [`public`]
+        [__Binary_Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__binary_node_base__empty]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__binary_node_base__clear]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            const_pointer get_derived() const;
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            pointer get_derived();
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[endsect] [/ binary_node_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_binary_node_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_binary_node_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:binary_node_gen `binary_node_gen`]
+
+[section Synopsis]
+[reference__binary_node_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_binary_node_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from __binary_node_base__.
+Let `T` be the data type.
+
+``
+    typedef _mpl_apply_wrap2_<binary_node_gen,Derived,T>::type r;
+``
+
+[*Return type:] [^_binary_node_base_<Derived,T>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ binary_node_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_desc_iter.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_desc_iter.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,221 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:breadth_first_desc_iter `breadth_first_descendant_iterator<Node>`]
+
+[section Synopsis]
+[reference__breadth_first_descendant_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the descendants of the specified root node in
+breadth-first fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+C B D E F G
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_breadth_first_desc_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Tree_Node_Descendant_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            breadth_first_descendant_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            explicit breadth_first_descendant_iterator(Node&);
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            breadth_first_descendant_iterator(
+                breadth_first_descendant_iterator<N> const&
+            );
+        ``]
+        [`breadth_first_descendant_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            breadth_first_descendant_iterator(
+                breadth_first_descendant_iterator const&
+            );
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            breadth_first_descendant_iterator&
+                operator=(breadth_first_descendant_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            breadth_first_descendant_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            breadth_first_descendant_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_breadth_first_descendant_iterator]]
+        [
+            Constructs and returns a `breadth_first_descendant_iterator` that
+            will iterate through the descendants of the specified node.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__breadth_first_iterate_descendants]]
+        [
+            Iterates through the descendants of the specified node in
+            breadth-first fashion, passing each element dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__breadth_first_descendant_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__breadth_first_descendant_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ breadth_first_descendant_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_breadth_first_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,216 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:breadth_first_iterator `breadth_first_iterator<Node>`]
+
+[section Synopsis]
+[reference__breadth_first_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+breadth-first fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+A C B D E F G
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_breadth_first_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Full_Tree_Node_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            breadth_first_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            explicit breadth_first_iterator(Node&);
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            breadth_first_iterator(breadth_first_iterator<N> const&);
+        ``]
+        [`breadth_first_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            breadth_first_iterator(breadth_first_iterator const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            breadth_first_iterator& operator=(breadth_first_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            breadth_first_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            breadth_first_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_breadth_first_iterator]]
+        [
+            Constructs and returns a `breadth_first_iterator` that will iterate
+            through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__breadth_first_iterate]]
+        [
+            Iterates through the specified node and its descendants in
+            breadth-first fashion, passing each node pointer dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__breadth_first_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__breadth_first_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ breadth_first_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_copy_constructible.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_copy_constructible.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,30 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:copy_constructible `BOOST_TREE_NODE_COPY_CONSTRUCTIBLE`]
+
+[section Synopsis]
+[reference__macro__copy_constructible]
+[endsect]
+
+[section Description]
+Meant to be used in the `public` scope of a __Tree_Node__ model that is not a
+__Base_Tree_Node__, this macro defines the copy constructors necessary for the
+`Derived` class to model the __Copy_Constructible__ concept.  These copy
+constructors forward their arguments to the derived copy constructor of the
+`Base` class.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_COPY_CONSTRUCTIBLE]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_copyable_and_movable.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_copyable_and_movable.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,40 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:copyable_and_movable `BOOST_TREE_NODE_COPYABLE_AND_MOVABLE`]
+
+[section Synopsis]
+[reference__macro__copyable_and_movable]
+[endsect]
+
+[section Description]
+Meant to be used in the `public` scope of a __Tree_Node__ model that inherits
+from a __Base_Tree_Node__, this macro defines the copy and move constructors
+and the copy and move assignment operators necessary for the `Derived` class
+to model the __Copy_Constructible__, __Assignable__, and __Movable__ concepts.  
+[endsect]
+
+[section Usage]
+``
+BOOST_TREE_NODE_COPYABLE_AND_MOVABLE(Derived, Base)
+``
+[endsect]
+
+[section Arguments]
+  * /Derived/ -- The name of the enclosing type.
+  * /Base/ -- The name of the type from which `Derived` inherits.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_COPYABLE_AND_MOVABLE]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_depth_first_desc_iter.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_depth_first_desc_iter.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,246 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:depth_first_desc_iter `depth_first_descendant_iterator<Node>`]
+
+[section Synopsis]
+[reference__depth_first_descendant_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+depth-first fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+C  pre_order_traversal
+D  pre_order_traversal
+D  post_order_traversal
+E  pre_order_traversal
+E  post_order_traversal
+C  post_order_traversal
+B  pre_order_traversal
+F  pre_order_traversal
+F  post_order_traversal
+G  pre_order_traversal
+G  post_order_traversal
+B  post_order_traversal
+``
+
+The traversal state conversion operator of this iterator will yield each value
+in the column on the right at the appropriate iteration.
+
+This iterator is ideal for algorithms that need to perform both preprocessing
+and postprocessing of a tree node, e.g. non-recursive copy constructors.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_depth_first_desc_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Tree_Node_Descendant_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Description]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [Defined in the __Tree_Node_Descendant_Iterator__ concept.]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Default constructor]
+        [``
+            depth_first_descendant_iterator();
+        ``]
+        [Defined in the __Default_Constructible__ concept.]
+    ]
+    [
+        [Constructor from node]
+        [``
+            depth_first_descendant_iterator(Node&);
+        ``]
+        [Defined in the __Tree_Node_Descendant_Iterator__ concept.]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            depth_first_descendant_iterator(
+                depth_first_descendant_iterator<N> const&
+            );
+        ``]
+        [
+            Constructs a `depth_first_descendant_iterator` object that will
+            point to the same element that the specified iterator points to.
+        ]
+    ]
+    [
+        [Copy constructor]
+        [``
+            depth_first_descendant_iterator(
+                depth_first_descendant_iterator const&
+            );
+        ``]
+        [Defined in the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Assignment operator]
+        [``
+            depth_first_descendant_iterator&
+                operator=(depth_first_descendant_iterator const&);
+        ``]
+        [Defined in the __Assignable__ concept.]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            depth_first_descendant_iterator& operator++();
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            depth_first_descendant_iterator operator++(int);
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [
+            Returns `pre_order_traversal` if this iterator has not yet examined
+            the children of the current node, `post_order_traversal` if this
+            iterator has examined all of the children of the current node, or
+            `no_traversal` if this iterator is not dereferenceable.
+        ]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_depth_first_descendant_iterator]]
+        [
+            Constructs and returns a `depth_first_descendant_iterator` that
+            will iterate through the descendants of the specified node.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__depth_first_iterate_descendants]]
+        [
+            Iterates through the descendants of the specified node in
+            depth-first fashion, passing each element dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__depth_first_descendant_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__depth_first_descendant_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ depth_first_descendant_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_depth_first_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_depth_first_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,243 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:depth_first_iterator `depth_first_iterator<Node>`]
+
+[section Synopsis]
+[reference__depth_first_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+depth-first fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+A  pre_order_traversal
+C  pre_order_traversal
+D  pre_order_traversal
+D  post_order_traversal
+E  pre_order_traversal
+E  post_order_traversal
+C  post_order_traversal
+B  pre_order_traversal
+F  pre_order_traversal
+F  post_order_traversal
+G  pre_order_traversal
+G  post_order_traversal
+B  post_order_traversal
+A  post_order_traversal
+``
+
+The traversal state conversion operator of this iterator will yield each value
+in the column on the right at the appropriate iteration.
+
+This iterator is ideal for algorithms that need to perform both preprocessing
+and postprocessing of a tree node.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_depth_first_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Full_Tree_Node_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Description]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [Defined in the __Full_Tree_Node_Iterator__ concept.]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Default constructor]
+        [``
+            depth_first_iterator();
+        ``]
+        [Defined in the __Default_Constructible__ concept.]
+    ]
+    [
+        [Constructor from node]
+        [``
+            depth_first_iterator(Node&);
+        ``]
+        [Defined in the __Full_Tree_Node_Iterator__ concept.]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            depth_first_iterator(depth_first_iterator<N> const&);
+        ``]
+        [
+            Constructs a `depth_first_iterator` object that will point to the
+            same element that the specified iterator points to.
+        ]
+    ]
+    [
+        [Copy constructor]
+        [``
+            depth_first_iterator(depth_first_iterator const&);
+        ``]
+        [Defined in the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Assignment operator]
+        [``
+            depth_first_iterator& operator=(depth_first_iterator const&);
+        ``]
+        [Defined in the __Assignable__ concept.]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            depth_first_iterator& operator++();
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            depth_first_iterator operator++(int);
+        ``]
+        [Defined in the __Forward_Iterator__ concept.]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [
+            Returns `pre_order_traversal` if this iterator has not yet examined
+            the children of the current node, `post_order_traversal` if this
+            iterator has examined all of the children of the current node, or
+            `no_traversal` if this iterator is not dereferenceable.
+        ]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Expression][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_depth_first_iterator]]
+        [
+            Constructs and returns a `depth_first_iterator` that will iterate
+            through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__depth_first_iterate]]
+        [
+            Iterates through the specified node and its descendants in
+            depth-first fashion, passing each node pointer dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__depth_first_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__depth_first_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ depth_first_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_dereference_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_dereference_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,31 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:dereference_iterator `dereference_iterator()`]
+
+[section Synopsis]
+[reference__dereference_iterator]
+[endsect]
+
+[section Description]
+This function takes in a __Tree_Node_Iterator__ and returns the __Tree_Node__
+to which it currently points.  In terms of genericity, this function is
+necessary not only because it handles both __Full_Tree_Node_Iterator__ and
+__Tree_Node_Descendant_Iterator__ models, but because the iterator interface of
+associative __Boost_Pointer_Container__ types is different from that of their
+standard library counterparts.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_algorithm_dereference_iterator_hpp__>
+``
+[endsect]
+
+[endsect] [/ dereference_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_base_fwd.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_base_fwd.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_ctor_base_fwd `BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD`]
+
+[section Synopsis]
+[reference__macro__emplacement_ctor_base_fwd]
+[endsect]
+
+[section Description]
+Defined only if the compiler does not support perfect forwarding, this macro
+expands to the first part of the initializer list of a constructor that will
+emulate perfect forwarding.  Used by
+__TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_fwd_decl.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_fwd_decl.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,46 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_ctor_fwd_decl `BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL`]
+
+[section Synopsis]
+[reference__macro__emplacement_ctor_fwd_decl]
+[endsect]
+
+[section Description]
+Defined only if the compiler does not support perfect forwarding, and meant to
+be used in the `public` scope of a __Base_Tree_Node__, this macro expands to
+the forward declaration of a constructor that will emulate it.  Uses
+__TREE_NODE_EMPLACEMENT_CTOR_HEADER__.
+[endsect]
+
+[section Usage]
+``
+_PP_REPEAT_(
+    BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+  , BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL
+  , Type
+)
+``
+[endsect]
+
+[section Arguments]
+  * /z/ -- The next available __PP_REPEAT__ dimension.
+  * /n/ -- The number of arguments that the current iteration's constructor
+    will accept.
+  * /Type/ -- The name of the enclosing type.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_header.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_header.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_ctor_header `BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER`]
+
+[section Synopsis]
+[reference__macro__emplacement_ctor_header]
+[endsect]
+
+[section Description]
+Defined only if the compiler does not support perfect forwarding, this macro
+expands to the header of a constructor that will emulate it.  Used by
+__TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL__ and
+__TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_def.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_def.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,48 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_ctor_inline_def `BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF`]
+
+[section Synopsis]
+[reference__macro__emplacement_ctor_inline_def]
+[endsect]
+
+[section Description]
+Defined only if the compiler does not support perfect forwarding, and meant to
+be used in the `public` scope of a __Tree_Node__ model that inherits from a
+__Base_Tree_Node__ and defines no additional members, this macro expands to the
+inline definition of a constructor that will emulate it.  Uses
+__TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__.
+[endsect]
+
+[section Usage]
+``
+_PP_REPEAT_(
+    BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS
+  , BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF
+  , (Derived, Base)
+)
+``
+[endsect]
+
+[section Arguments]
+  * /z/ -- The next available __PP_REPEAT__ dimension.
+  * /n/ -- The number of arguments that the current iteration's constructor
+    will accept.
+  * /Derived/ -- The name of the enclosing type.
+  * /Base/ -- The name of the type from which `Derived` inherits.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_hdr.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_emplace_ctor_inline_hdr.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,29 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:emplace_ctor_inline_hdr `BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR`]
+
+[section Synopsis]
+[reference__macro__emplacement_ctor_inline_header]
+[endsect]
+
+[section Description]
+Defined only if the compiler does not support perfect forwarding, this macro
+expands to the header of a constructor that emulates it along witht the first
+part of its initialization list.  Uses __TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD__;
+used by __TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_preprocessor_hpp__>
+``
+[endsect]
+
+[endsect] [/ BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HDR]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_in_order_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_in_order_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,258 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:in_order_iterator `in_order_iterator<Node>`]
+
+[section Synopsis]
+[reference__in_order_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+in-order fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+The tree nodes will be traversed forward in the following order:
+
+``
+D C E A F B G
+``
+
+This iterator can also be used to traverse the tree nodes /backwards/:
+
+``
+G B F A E C D
+``
+
+[important
+    This iterator works only on __Binary_Tree_Node__ models.
+]
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_in_order_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Full_Tree_Node_Iterator__
+  * __Bidirectional_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            in_order_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            in_order_iterator(Node&);
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            in_order_iterator(in_order_iterator<N> const&);
+        ``]
+        [`in_order_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            in_order_iterator(in_order_iterator const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            in_order_iterator& operator=(in_order_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            in_order_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            in_order_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-decrement operator]
+        [``
+            in_order_iterator& operator--();
+        ``]
+        [__Reverse_Iterator__]
+    ]
+    [
+        [Post-decrement operator]
+        [``
+            in_order_iterator operator--(int);
+        ``]
+        [__Reverse_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Expression][Description]]
+    [
+        [Forward Iterator creation]
+        [[reference__make_in_order_forward_iterator]]
+        [
+            Constructs and returns a `in_order_iterator` that will iterate
+            forward through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Reverse iterator creation]
+        [[reference__make_in_order_reverse_iterator]]
+        [
+            Constructs and returns a `in_order_iterator` that will iterate
+            in reverse through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Forward iteration]
+        [[reference__in_order_iterate_forward]]
+        [
+            Iterates through the specified node and its descendants in forward
+            in-order fashion, passing each node pointer dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Reverse iteration]
+        [[reference__in_order_iterate_reverse]]
+        [
+            Iterates through the specified node and its descendants in reverse
+            in-order fashion, passing each element dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__in_order_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__in_order_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect] [/ Non-members]
+
+[endsect] [/ in_order_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_nary_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_nary_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,197 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:nary_node `nary_node<T,Selector>`]
+
+[section Description]
+This class template is suitable for classes or algorithms that require a tree
+node data structure that can handle an arbitrary number of children.  Objects
+of this type can be stored by value.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_nary_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`T`]
+        [The type of the object to be stored in an `nary_node`.]
+        []
+        []
+    ]
+    [
+        [`Selector`]
+        [The type that determines the child container type.]
+        [[^_is_recursive_selector_<Selector>] must return __mpl_true__.]
+        [__ptr_dequeS__]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __N_ary_Tree_Node__
+  * __Default_Constructible__ if `T` is __Default_Constructible__
+  * __Copy_Constructible__ if `T` is __Copy_Constructible__
+  * __Assignable__ if `T` is __Copy_Constructible__ and __Movable__
+  * __Movable__ if `T` is __Movable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__nary_node__bases]
+[endsect]
+
+[section:members Public Members]
+Given:
+[reference__nary_node__super_t]
+[table
+    [[Name][Definition][Where defined]]
+    [
+        [Data type]
+        [[reference__nary_node__traits]]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__nary_node__pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__nary_node__const_pointer]]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__nary_node__iterator]]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__nary_node__const_iterator]]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Copy constructor]
+        [``
+            nary_node(nary_node const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Move constructor]
+        [``
+            nary_node(nary_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__nary_node__emplacement_ctor]]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            nary_node& operator=(nary_node const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            nary_node& operator=(nary_node&&);
+        ``]
+        [__Movable__]
+    ]
+    [
+        [Data access]
+        [[reference__nary_node_base__get_data__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__nary_node_base__get_data]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__nary_node_base__get_parent_ptr__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__nary_node_base__get_parent_ptr]]
+        [__Tree_Node__]
+    ]
+    [
+        [Child creation]
+        [[reference__nary_node_base__emplace]]
+        [__N_ary_Tree_Node__]
+    ]
+    [
+        [Child copy creation]
+        [``
+            iterator insert(nary_node const& child);
+        ``]
+        [__N_ary_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__nary_node_base__begin__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__nary_node_base__begin]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__nary_node_base__end__const]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__nary_node_base__end]]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__nary_node_base__size]]
+        [__Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__nary_node_base__empty]]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__nary_node_base__clear]]
+        [__Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[section Example]
+<__example_nary_node_cpp__>
+[endsect]
+
+[section Test]
+<__test_nary_node_cpp__>
+[endsect]
+
+[endsect] [/ nary_node]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_nary_node_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_nary_node_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,233 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:nary_node_base `nary_node_base<Derived,T,Selector>`]
+
+[section Description]
+The __nary_node__ class template inherits its functionality from this class
+template.  They differ only with regard to template parameters: the
+__nary_node__ class template is meant to be used directly as a data structure,
+while `nary_node_base` is more suitable as a base class template from which
+__Tree_Node__ adaptor class templates can derive via the __nary_node_gen__
+__Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_nary_node_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`T`]
+        [The data type.]
+        []
+        []
+    ]
+    [
+        [`Selector`]
+        [The type that determines the child container type.]
+        [[^_is_recursive_selector_<Selector>] must return __mpl_true__.]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __N_ary_Tree_Node__
+  * __Base_Tree_Node__
+  * __Default_Constructible__ if `T` is __Default_Constructible__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__nary_node_base__bases]
+[endsect]
+
+[section:members Members]
+[table
+    [[Name][Definition][Scope][Where defined]]
+    [
+        [Data type]
+        [[reference__nary_node_base__traits]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer type]
+        [[reference__nary_node_base__pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Pointer-to-const type]
+        [[reference__nary_node_base__const_pointer]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Iterator type]
+        [[reference__nary_node_base__iterator]]
+        [`public`]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Immutable iterator type]
+        [[reference__nary_node_base__const_iterator]]
+        [`public`]
+        [__Non_Associative_Tree_Node__]
+    ]
+    [
+        [Derived copy constructor]
+        [[reference__nary_node_base__derived_copy_ctor]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Move constructor]
+        [``
+            nary_node_base(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__nary_node_base__emplacement_ctor]]
+        [`protected`]
+        [__Tree_Node__]
+    ]
+    [
+        [Copy or move notification]
+        [[reference__nary_node_base__on_post_copy_or_move]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived copy assignment]
+        [[reference__nary_node_base__copy_assign]]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived move assignment]
+        [``
+            Derived& operator=(Derived&&);
+        ``]
+        [`protected`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__nary_node_base__get_data__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Data access]
+        [[reference__nary_node_base__get_data]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__nary_node_base__get_parent_ptr__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Parent access]
+        [[reference__nary_node_base__get_parent_ptr]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Child creation]
+        [[reference__nary_node_base__emplace]]
+        [`public`]
+        [__N_ary_Tree_Node__]
+    ]
+    [
+        [Child copy creation]
+        [[reference__nary_node_base__insert]]
+        [`public`]
+        [__N_ary_Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__nary_node_base__begin__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range begin access]
+        [[reference__nary_node_base__begin]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__nary_node_base__end__const]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range past-the-end access]
+        [[reference__nary_node_base__end]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Children range size query]
+        [[reference__nary_node_base__size]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Leaf node query]
+        [[reference__nary_node_base__empty]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Remove all children]
+        [[reference__nary_node_base__clear]]
+        [`public`]
+        [__Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            const_pointer get_derived() const;
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+    [
+        [Derived access]
+        [``
+            pointer get_derived();
+        ``]
+        [`public`]
+        [__Base_Tree_Node__]
+    ]
+]
+[endsect] [/ Members]
+
+[endsect] [/ nary_node_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_nary_node_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_nary_node_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,62 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:nary_node_gen `nary_node_gen<Selector>`]
+
+[section Synopsis]
+[reference__nary_node_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_nary_node_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Selector`]
+        [
+            The type that determines the child container type of
+            __nary_node_base__.
+        ]
+        [[^_is_recursive_selector_<Selector>] must return __mpl_true__.]
+        [__ptr_dequeS__]
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from __nary_node_base__.
+Let `T` be the data type.
+Let `Selector` be a valid `nary_node_gen` template argument.
+
+``
+    typedef _mpl_apply_wrap2_<nary_node_gen<Selector>,Derived,T>::type r;
+``
+
+[*Return type:] [^_nary_node_base_<Derived,T,Selector>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ nary_node_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_post_order_desc_iter.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_post_order_desc_iter.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,221 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:post_order_desc_iter `post_order_descendant_iterator<Node>`]
+
+[section Synopsis]
+[reference__post_order_descendant_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the descendants of the specified root node in
+post-order fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+D E C F G B
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_post_order_desc_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Tree_Node_Descendant_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            post_order_descendant_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            post_order_descendant_iterator(Node&);
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            post_order_descendant_iterator(
+                post_order_descendant_iterator<N> const&
+            );
+        ``]
+        [`post_order_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            post_order_descendant_iterator(
+                post_order_descendant_iterator const&
+            );
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            post_order_descendant_iterator&
+                operator=(post_order_descendant_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            post_order_descendant_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            post_order_descendant_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_post_order_descendant_iterator]]
+        [
+            Constructs and returns a `post_order_descendant_iterator` that will
+            iterate through the descendants of the specified node.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__post_order_iterate_descendants]]
+        [
+            Iterates through the descendants of the specified node in
+            post-order fashion, passing each element dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__post_order_descendant_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__post_order_descendant_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ post_order_descendant_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_post_order_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_post_order_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,216 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:post_order_iterator `post_order_iterator<Node>`]
+
+[section Synopsis]
+[reference__post_order_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+post-order fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+D E C F G B A
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_post_order_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Full_Tree_Node_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            post_order_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            explicit post_order_iterator(Node&);
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            post_order_iterator(post_order_iterator<N> const&);
+        ``]
+        [`post_order_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            post_order_iterator(post_order_iterator const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            post_order_iterator& operator=(post_order_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            post_order_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            post_order_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_post_order_iterator]]
+        [
+            Constructs and returns a `post_order_iterator` that will iterate
+            through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__post_order_iterate]]
+        [
+            Iterates through the specified node and its descendants in
+            post-order fashion, passing each node pointer dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__post_order_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__post_order_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ post_order_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_pre_order_desc_iter.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_pre_order_desc_iter.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,221 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:pre_order_desc_iter `pre_order_descendant_iterator<Node>`]
+
+[section Synopsis]
+[reference__pre_order_descendant_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the descendants of the specified root node in
+pre-order fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+C D E B F G
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_pre_order_desc_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Tree_Node_Descendant_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            pre_order_descendant_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            explicit pre_order_descendant_iterator(Node&);
+        ``]
+        [__Tree_Node_Descendant_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            pre_order_descendant_iterator(
+                pre_order_descendant_iterator<N> const&
+            );
+        ``]
+        [`pre_order_descendant_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            pre_order_descendant_iterator(
+                pre_order_descendant_iterator const&
+            );
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            pre_order_descendant_iterator&
+                operator=(pre_order_descendant_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            pre_order_descendant_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            pre_order_descendant_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_pre_order_descendant_iterator]]
+        [
+            Constructs and returns a `pre_order_descendant_iterator` that will
+            iterate through the descendants of the specified node.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__pre_order_iterate_descendants]]
+        [
+            Iterates through the descendants of the specified node in
+            pre-order fashion, passing each element dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__pre_order_descendant_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__pre_order_descendant_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ pre_order_descendant_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_pre_order_iterator.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_pre_order_iterator.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,216 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:pre_order_iterator `pre_order_iterator<Node>`]
+
+[section Synopsis]
+[reference__pre_order_iterator]
+[endsect]
+
+[section Description]
+This iterator traverses the specified root node and all its descendants in
+pre-order fashion, e.g. given the following tree representation:
+
+``
+      A
+      |
+  C---+---B
+  |       |
++-+-+   +-+-+
+|   |   |   |
+D   E   F   G
+``
+
+This iterator will traverse the tree nodes in the following order:
+
+``
+A C D E B F G
+``
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_pre_order_iterator_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Node`]
+        [The type of a tree node.]
+        [
+            It must model the __Tree_Node__ concept, but it can be
+            `const`-qualified.
+        ]
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Full_Tree_Node_Iterator__
+  * __Default_Constructible__
+  * __Copy_Constructible__
+  * __Assignable__
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Expression][Where defined]]
+    [
+        [Value type]
+        [``
+            typedef ... value_type;
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Reference type]
+        [``
+            typedef ... reference;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pointer type]
+        [``
+            typedef ... pointer;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Distance type]
+        [``
+            typedef ... difference_type;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Iterator category]
+        [``
+            typedef ... iterator_category;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Default constructor]
+        [``
+            pre_order_iterator();
+        ``]
+        [__Default_Constructible__]
+    ]
+    [
+        [Constructor from node]
+        [``
+            explicit pre_order_iterator(Node&);
+        ``]
+        [__Full_Tree_Node_Iterator__]
+    ]
+    [
+        [Conversion constructor]
+        [``
+            template <typename N>
+            pre_order_iterator(pre_order_iterator<N> const&);
+        ``]
+        [`pre_order_iterator`]
+    ]
+    [
+        [Copy constructor]
+        [``
+            pre_order_iterator(pre_order_iterator const&);
+        ``]
+        [__Copy_Constructible__]
+    ]
+    [
+        [Assignment operator]
+        [``
+            pre_order_iterator& operator=(pre_order_iterator const&);
+        ``]
+        [__Assignable__]
+    ]
+    [
+        [Dereference operator]
+        [``
+            reference operator*() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Indirection operator]
+        [``
+            pointer operator->() const;
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Pre-increment operator]
+        [``
+            pre_order_iterator& operator++();
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Post-increment operator]
+        [``
+            pre_order_iterator operator++(int);
+        ``]
+        [__Forward_Iterator__]
+    ]
+    [
+        [Traversal state conversion operator]
+        [``
+            operator _traversal_state_() const;
+        ``]
+        [__Tree_Node_Iterator__]
+    ]
+]
+[endsect] [/ Members]
+
+[section:non_members Non-members]
+[table
+    [[Name][Definition][Description]]
+    [
+        [Iterator creation]
+        [[reference__make_pre_order_iterator]]
+        [
+            Constructs and returns a `pre_order_iterator` that will iterate
+            through the specified node and its descendants.
+        ]
+    ]
+    [
+        [Iteration]
+        [[reference__pre_order_iterate]]
+        [
+            Iterates through the specified node and its descendants in
+            pre-order fashion, passing each node pointer dereferenced to
+            the specified __Unary_Function__ object.
+        ]
+    ]
+    [
+        [Equality]
+        [[reference__pre_order_iterator__operator_equals]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+    [
+        [Inequality]
+        [[reference__pre_order_iterator__operator_not_equal]]
+        [Defined by the __Input_Iterator__ concept.]
+    ]
+]
+[endsect]
+
+[endsect] [/ pre_order_iterator]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_traversal_state.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_traversal_state.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,34 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:traversal_state `traversal_state`]
+
+[section Synopsis]
+[reference__traversal_state]
+[endsect]
+
+[section Description]
+This enumeration type is the return type of the dereferenceability expression
+defined by each iterator type that this library provides.  The `no_traversal`
+value corresponds to `false` in a boolean context, enabling the iterator types
+to fulfill their runtime requirements for dereferenceability.  The
+`pre_order_traversal` and `post_order_traversal` values are significant because
+the __depth_first_iterator__ traverses each node twice, so algorithms must be
+able to distinguish which state the iterator is in when it traverses a tree
+node.  The `breadth_first_traversal` and `in_order_traversal` values are
+defined for completeness.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_traversal_state_hpp__>
+``
+[endsect]
+
+[endsect] [/ traversal_state]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_tree_node_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_tree_node_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,185 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:tree_node_base `tree_node_base<Derived>`]
+
+[section Description]
+All models of the __Base_Tree_Node__ concept that this library provides either
+inherit from this type or declare it as a `friend struct` if they override any
+of its implementation methods.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_base_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+]
+[endsect]
+
+[section:public_bases Public Base Classes]
+None.
+[endsect]
+
+[section Members]
+[table
+    [[Name][Definition][Scope][Description]]
+    [
+        [Pointer type]
+        [``
+            typedef Derived* pointer;
+        ``]
+        [`public`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Pointer-to-const type]
+        [``
+            typedef Derived const* const_pointer;
+        ``]
+        [`public`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Derived access]
+        [``
+            const_pointer get_derived() const;
+        ``]
+        [`public`]
+        [Returns `this` as the derived type.]
+    ]
+    [
+        [Derived access]
+        [``
+            pointer get_derived();
+        ``]
+        [`public`]
+        [Returns `this` as the derived type.]
+    ]
+    [
+        [Insertion notification implementation]
+        [[reference__tree_node_base__on_post_inserted_impl__true]]
+        [`protected`]
+        [
+            Subclass types should override this method if they store iterators
+            that will remain valid even if any of the siblings of the pointees
+            are removed.  The overriding implementation should simply store the
+            specified position.  Does nothing by default.
+        ]
+    ]
+    [
+        [Insertion notification implementation]
+        [[reference__tree_node_base__on_post_inserted_impl__false]]
+        [`protected`]
+        [
+            Subclass types should override this method if they store iterators
+            that may become invalidated if any of the siblings of the pointees
+            are removed.  The overriding implementation should validate the
+            positions of the siblings as well as its own.  Does nothing by
+            default.
+        ]
+    ]
+    [
+        [Insertion notification]
+        [[reference__tree_node_base__on_post_inserted]]
+        [`protected`]
+        [
+            Subclass types should invoke this method on their child nodes after
+            they are stored, or on the siblings of those child nodes after they
+            are removed.  Calls the corresponding implementation method.
+        ]
+    ]
+    [
+        [Erasure notification implementation]
+        [[reference__tree_node_base__on_post_erase_impl]]
+        [`protected`]
+        [
+            Subclass types should override this method after one or more of
+            the tree node's children are removed.  Does nothing by default.
+        ]
+    ]
+    [
+        [Erasure notification]
+        [[reference__tree_node_base__on_post_erase]]
+        [`protected`]
+        [
+            Subclass types should invoke this method after one or more of
+            the tree node's children are removed.  Calls the corresponding
+            implementation method.
+        ]
+    ]
+    [
+        [Clear notification implementation]
+        [[reference__tree_node_base__on_post_clear_impl]]
+        [`protected`]
+        [
+            Subclass types should override this method after all of the
+            tree node's children are removed.  Does nothing by default.
+        ]
+    ]
+    [
+        [Clear notification]
+        [[reference__tree_node_base__on_post_clear]]
+        [`protected`]
+        [
+            Subclass types should invoke this method after all of the
+            tree node's children are removed.  Calls the corresponding
+            implementation method.
+        ]
+    ]
+    [
+        [Left rotation notification implementation]
+        [[reference__tree_node_base__on_post_rotate_left_impl]]
+        [`protected`]
+        [
+            Subclass types should override this method after the tree node is
+            rotate left.  Does nothing by default.
+        ]
+    ]
+    [
+        [Left rotation notification]
+        [[reference__tree_node_base__on_post_rotate_left]]
+        [`protected`]
+        [
+            Subclass types should invoke this method after the tree node is
+            rotated left.  Calls the corresponding implementation method.
+        ]
+    ]
+    [
+        [Right rotation notification implementation]
+        [[reference__tree_node_base__on_post_rotate_right_impl]]
+        [`protected`]
+        [
+            Subclass types should override this method after the tree node is
+            rotate right.  Does nothing by default.
+        ]
+    ]
+    [
+        [Right rotation notification]
+        [[reference__tree_node_base__on_post_rotate_right]]
+        [`protected`]
+        [
+            Subclass types should invoke this method after the tree node is
+            rotated right.  Calls the corresponding implementation method.
+        ]
+    ]
+]
+[endsect] [/ Members]
+
+[endsect] [/ tree_node_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_count.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_count.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,122 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_count `with_count<BaseGenerator,T1,T2,Count>`]
+
+[section Description]
+The [*count] of a tree node can be defined as the number of itself plus its
+descendants.  In addition to the operations it inherits from the return type
+of `BaseGenerator`, this __Tree_Node__ adaptor provides constant-time access
+to the count of the node by updating this information after structural
+modifications have been performed.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_count_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type `with_count` will
+            ultimately inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is not `void`; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if not `void`; ignored otherwise.]
+        []
+        [`void`]
+    ]
+    [
+        [`Count`]
+        [The count type.]
+        []
+        [`std::size_t`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is not `void`;
+    __Non_Associative_Tree_Node__ otherwise
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_count__bases]
+[endsect]
+
+[section:members Public Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Description]]
+    [
+        [Copy constructor]
+        [``
+            with_count(with_count const&);
+        ``]
+        [Defined by the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Move constructor]
+        [``
+            with_count(with_count&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_count__emplacement_ctor]]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            with_count& operator=(with_count const&);
+        ``]
+        [Defined by the __Assignable__ concept.]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            with_count& operator=(with_count&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Count access]
+        [[reference__with_count_base__get_count]]
+        [Returns the count of this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_count]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_count_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_count_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,118 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_count_base `with_count_base<Derived,BaseGenerator,T1,T2,Count>`]
+
+[section Description]
+The __tree_node_with_count__ class template inherits its functionality from
+this class template.  They differ only with regard to template parameters: the
+__tree_node_with_count__ class template is meant to be used directly as a data
+structure, while `with_count_base` is more suitable as a base class template
+from which other __Tree_Node__ adaptor class templates can derive via the
+__tree_node_with_count_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_count_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            `with_count_base` will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is not `void`; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if not `void`; ignored otherwise.]
+        []
+        []
+    ]
+    [
+        [`Count`]
+        [The count type.]
+        []
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is not `void`;
+    __Non_Associative_Tree_Node__ otherwise
+  * __Base_Tree_Node__
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_count_base__bases]
+[endsect]
+
+[section:members Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Scope][Description]]
+    [
+        [Derived copy constructor]
+        [[reference__with_count_base__derived_copy_ctor]]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            with_count_base(Derived&&);
+        ``]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_count_base__emplacement_ctor]]
+        [`protected`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Count access]
+        [[reference__with_count_base__get_count]]
+        [`public`]
+        [Returns the height of this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_count_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_count_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_count_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,88 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_count_gen `with_count_gen<BaseGenerator>`]
+
+[section Synopsis]
+[reference__with_count_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_count_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            __tree_node_with_count_base__ will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`Count`]
+        [The count type.]
+        []
+        [`std::size_t`]
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from
+__tree_node_with_count_base__.
+Let `Key` be the key type.
+Let `Data` be the data type.
+Let `BaseGenerator` be a valid first template argument for `with_count_gen`.
+Let `Count` be the count type.
+
+``
+    typedef _mpl_apply_wrap3_<
+        with_count_gen<BaseGenerator,Count>
+      , Derived
+      , Key
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_count_base_<Derived,BaseGenerator,Key,Data,Count>]
+
+``
+    typedef _mpl_apply_wrap2_<
+        with_count_gen<BaseGenerator,Count>
+      , Derived
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_count_base_<Derived,BaseGenerator,Data,void,Count>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ with_count_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_height.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_height.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,123 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_height `with_height<BaseGenerator,T1,T2,Height>`]
+
+[section Description]
+The [*height] of a tree node can be defined as the magnitude of the difference
+between its ply and that of its deepest descendant.  In addition to the
+operations it inherits from the return type of `BaseGenerator`, this
+__Tree_Node__ adaptor provides constant-time access to the height of the node
+by updating this information after structural modifications have been
+performed.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_height_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type `with_height`
+            will ultimately inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is not `void`; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if not `void`; ignored otherwise.]
+        []
+        [`void`]
+    ]
+    [
+        [`Height`]
+        [The height type.]
+        []
+        [`std::size_t`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is not `void`;
+    __Non_Associative_Tree_Node__ otherwise
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_height__bases]
+[endsect]
+
+[section:members Public Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Description]]
+    [
+        [Copy constructor]
+        [``
+            with_height(with_height const&);
+        ``]
+        [Defined by the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Move constructor]
+        [``
+            with_height(with_height&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_height__emplacement_ctor]]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            with_height& operator=(with_height const&);
+        ``]
+        [Defined by the __Assignable__ concept.]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            with_height& operator=(with_height&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Height access]
+        [[reference__with_height_base__get_height]]
+        [Returns the height of this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_height]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_height_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_height_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,120 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_height_base
+    `with_height_base<Derived,BaseGenerator,T1,T2,Height>`
+]
+
+[section Description]
+The __tree_node_with_height__ class template inherits its functionality from
+this class template.  They differ only with regard to template parameters: the
+__tree_node_with_height__ class template is meant to be used directly as a data
+structure, while `with_height_base` is more suitable as a base class template
+from which other __Tree_Node__ adaptor class templates can derive via the
+__tree_node_with_height_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_height_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            `with_height_base` will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is not `void`; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if not `void`; ignored otherwise.]
+        []
+        []
+    ]
+    [
+        [`Height`]
+        [The height type.]
+        []
+        []
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is not `void`;
+    __Non_Associative_Tree_Node__ otherwise
+  * __Base_Tree_Node__
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_height_base__bases]
+[endsect]
+
+[section:members Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Scope][Description]]
+    [
+        [Derived copy constructor]
+        [[reference__with_height_base__derived_copy_ctor]]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            with_height_base(Derived&&);
+        ``]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_height_base__emplacement_ctor]]
+        [`protected`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Height access]
+        [[reference__with_height_base__get_height]]
+        [`public`]
+        [Returns the height of this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_height_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_height_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_height_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,88 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_height_gen `with_height_gen<BaseGenerator>`]
+
+[section Synopsis]
+[reference__with_height_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_height_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            __tree_node_with_height_base__ will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`Height`]
+        [The height type.]
+        []
+        [`std::size_t`]
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from
+__tree_node_with_height_base__.
+Let `Key` be the key type.
+Let `Data` be the data type.
+Let `BaseGenerator` be a valid first template argument for `with_height_gen`.
+Let `Height` be the height type.
+
+``
+    typedef _mpl_apply_wrap3_<
+        with_height_gen<BaseGenerator,Height>
+      , Derived
+      , Key
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_height_base_<Derived,BaseGenerator,Key,Data,Height>]
+
+``
+    typedef _mpl_apply_wrap2_<
+        with_height_gen<BaseGenerator,Height>
+      , Derived
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_height_base_<Derived,BaseGenerator,Data,void,Height>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ with_height_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_position.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_position.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,119 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_position `with_position<BaseGenerator,T1,T2>`]
+
+[section Description]
+This __Tree_Node__ adaptor provides access to its position in its parent's
+range of children as well as the other operations it inherits from the return
+type of `BaseGenerator`.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_position_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type `with_position`
+            will ultimately inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is specified; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if specified; ignored otherwise.]
+        []
+        [`void`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is specified;
+    __Non_Associative_Tree_Node__ otherwise
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_position__bases]
+[endsect]
+
+[section:members Public Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Description]]
+    [
+        [Copy constructor]
+        [``
+            with_position(with_position const&);
+        ``]
+        [Defined by the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Move constructor]
+        [``
+            with_position(with_position&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_position__emplacement_ctor]]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            with_position& operator=(with_position const&);
+        ``]
+        [Defined by the __Assignable__ concept.]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            with_position& operator=(with_position&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Position access]
+        [[reference__with_position_base__get_position__const]]
+        [Returns the immutable iterator that points to this tree node.]
+    ]
+    [
+        [Position access]
+        [[reference__with_position_base__get_position]]
+        [Returns the iterator that points to this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_position]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_position_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_position_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,118 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_position_base `with_position_base<Derived,BaseGenerator,T1,T2>`]
+
+[section Description]
+The __tree_node_with_position__ class template inherits its functionality from
+this class template.  They differ only with regard to template parameters: the
+__tree_node_with_position__ class template is meant to be used directly as a
+data structure, while `with_position_base` is more suitable as a base class
+template from which other __Tree_Node__ adaptor class templates can derive via
+the __tree_node_with_position_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_position_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            `with_position_base` will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is specified; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if specified; ignored otherwise.]
+        []
+        [`void`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is specified;
+    __Non_Associative_Tree_Node__ otherwise
+  * __Base_Tree_Node__
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_position_base__bases]
+[endsect]
+
+[section:members Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Scope][Description]]
+    [
+        [Derived copy constructor]
+        [[reference__with_position_base__derived_copy_ctor]]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            with_position_base(Derived&&);
+        ``]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_position_base__emplacement_ctor]]
+        [`protected`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Position access]
+        [[reference__with_position_base__get_position__const]]
+        [`public`]
+        [Returns the immutable iterator that points to this tree node.]
+    ]
+    [
+        [Position access]
+        [[reference__with_position_base__get_position]]
+        [`public`]
+        [Returns the iterator that points to this tree node.]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_position_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_position_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_position_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,77 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_position_gen `with_position_gen<BaseGenerator>`]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_position_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            __tree_node_with_position_base__ will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from
+__tree_node_with_position_base__.
+Let `Key` be the key type.
+Let `Data` be the data type.
+Let `BaseGenerator` be a valid `with_position_gen` template argument.
+
+``
+    typedef _mpl_apply_wrap3_<
+        with_position_gen<BaseGenerator>
+      , Derived
+      , Key
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_position_base_<Derived,BaseGenerator,Key,Data>]
+
+``
+    typedef _mpl_apply_wrap2_<
+        with_position_gen<BaseGenerator>
+      , Derived
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_position_base_<Derived,BaseGenerator,Data,void>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ with_position_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,133 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_rb_flag `with_red_black_flag<BaseGenerator,T1,T2>`]
+
+[section Description]
+In addition to the other operations it inherits from the return type of
+`BaseGenerator`, this __Tree_Node__ adaptor provides access to a flag that
+indicates whether the node is red or black.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_red_black_flag_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type `with_position`
+            will ultimately inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is specified; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if specified; ignored otherwise.]
+        []
+        [`void`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is specified;
+    __Non_Associative_Tree_Node__ otherwise
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_red_black_flag__bases]
+[endsect]
+
+[section:members Public Members]
+In addition to those inherited from the return type of `BaseGenerator`, the
+following members are defined:
+
+[table
+    [[Name][Definition][Description]]
+    [
+        [Copy constructor]
+        [``
+            with_red_black_flag(with_red_black_flag const&);
+        ``]
+        [Defined by the __Copy_Constructible__ concept.]
+    ]
+    [
+        [Move constructor]
+        [``
+            with_red_black_flag(with_red_black_flag&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_red_black_flag__emplacement_ctor]]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Copy assignment operator]
+        [``
+            with_red_black_flag& operator=(with_red_black_flag const&);
+        ``]
+        [Defined by the __Assignable__ concept.]
+    ]
+    [
+        [Move assignment operator]
+        [``
+            with_red_black_flag& operator=(with_red_black_flag&&);
+        ``]
+        [Defined by the __Movable__ concept.]
+    ]
+    [
+        [Red flag query]
+        [[reference__with_red_black_flag_base__is_red]]
+        [
+            Returns `true` if the flag is set to red, `false` if it is set to
+            black.
+        ]
+    ]
+    [
+        [Black flag query]
+        [[reference__with_red_black_flag_base__is_black]]
+        [
+            Returns `true` if the flag is set to black, `false` if it is set to
+            red.
+        ]
+    ]
+    [
+        [Red flag setting]
+        [[reference__with_red_black_flag_base__set_red_flag]]
+        [
+            Sets the flag to red if the argument evaluates to `true`; sets the
+            flag to black if the argument evaluates to `false`.
+        ]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_red_black_flag]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_base.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_base.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,132 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section:with_rb_flag_base
+    `with_red_black_flag_base<Derived,BaseGenerator,T1,T2>`
+]
+
+[section Description]
+The __tree_node_with_red_black_flag__ class template inherits its functionality
+from this class template.  They differ only with regard to template parameters:
+the __tree_node_with_red_black_flag__ class template is meant to be used
+directly as a data structure, while `with_red_black_flag_base` is more suitable
+as a base class template from which other __Tree_Node__ adaptor class templates
+can derive via the __tree_node_with_red_black_flag_gen__ __Type_Generator__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_red_black_flag_hpp__>
+``
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`Derived`]
+        [The most descendant type that will inherit from this one.]
+        []
+        []
+    ]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            `with_red_black_flag_base` will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+    [
+        [`T1`]
+        [The key type if `T2` is specified; the data type otherwise.]
+        []
+        []
+    ]
+    [
+        [`T2`]
+        [The data type if specified; ignored otherwise.]
+        []
+        [`void`]
+    ]
+]
+[endsect]
+
+[section:model_of Model of]
+
+  * __Associative_Tree_Node__ if `T2` is specified;
+    __Non_Associative_Tree_Node__ otherwise
+  * __Base_Tree_Node__
+  * any other concept that the return type of `BaseGenerator` models
+
+[endsect]
+
+[section:public_bases Public Base Classes]
+[reference__with_red_black_flag_base__bases]
+[endsect]
+
+[section:members Members]
+[table
+    [[Name][Definition][Scope][Description]]
+    [
+        [Derived copy constructor]
+        [[reference__with_red_black_flag_base__derived_copy_ctor]]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Derived move constructor]
+        [``
+            with_red_black_flag_base(Derived&&);
+        ``]
+        [`protected`]
+        [Defined by the __Base_Tree_Node__ concept.]
+    ]
+    [
+        [Emplacement constructor]
+        [[reference__with_red_black_flag_base__emplacement_ctor]]
+        [`protected`]
+        [Defined by the __Tree_Node__ concept.]
+    ]
+    [
+        [Red flag query]
+        [[reference__with_red_black_flag_base__is_red]]
+        [`public`]
+        [
+            Returns `true` if the flag is set to red, `false` if it is set to
+            black.
+        ]
+    ]
+    [
+        [Black flag query]
+        [[reference__with_red_black_flag_base__is_black]]
+        [`public`]
+        [
+            Returns `true` if the flag is set to black, `false` if it is set to
+            red.
+        ]
+    ]
+    [
+        [Red flag setting]
+        [[reference__with_red_black_flag_base__set_red_flag]]
+        [`public`]
+        [
+            Sets the flag to red if the argument evaluates to `true`; sets the
+            flag to black if the argument evaluates to `false`.
+        ]
+    ]
+]
+[endsect]
+
+[section:non_members Non-members]
+None beyond those inherited from the return type of `BaseGenerator`.
+[endsect]
+
+[endsect] [/ with_red_black_flag_base]
+
Added: sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/ref_with_rb_flag_gen.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 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])
+=============================================================================/]
+
+[section:with_red_black_flag_gen `with_red_black_flag_gen<BaseGenerator>`]
+
+[section Synopsis]
+[reference__with_red_black_flag_gen]
+[endsect]
+
+[section Description]
+TODO.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_tree_node_with_red_black_flag_hpp__>
+``
+[endsect]
+
+[section:model_of Model of]
+__Type_Generator__
+[endsect]
+
+[section:tpl_param Template Parameters]
+[table
+    [[Parameter][Description][Requirements][Default]]
+    [
+        [`BaseGenerator`]
+        [
+            The __Metafunction_Class__ from whose return type
+            __tree_node_with_red_black_flag_base__ will inherit.
+        ]
+        [It must model the __Type_Generator__ concept.]
+        []
+    ]
+]
+[endsect]
+
+[section:expressions Expression Semantics]
+Let `Derived` be the type that will inherit from
+__tree_node_with_red_black_flag_base__.
+Let `Key` be the key type.
+Let `Data` be the data type.
+Let `BaseGenerator` be a valid `with_red_black_flag_gen` template argument.
+
+``
+    typedef _mpl_apply_wrap3_<
+        with_red_black_flag_gen<BaseGenerator>
+      , Derived
+      , Key
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_red_black_flag_base_<Derived,BaseGenerator,Key,Data>]
+
+``
+    typedef _mpl_apply_wrap2_<
+        with_red_black_flag_gen<BaseGenerator>
+      , Derived
+      , Data
+    >::type r;
+``
+
+[*Return type:]
+[^_tree_node_with_red_black_flag_base_<Derived,BaseGenerator,Data,void>]
+
+[endsect]
+
+[section Complexity]
+Compile time.
+[endsect]
+
+[endsect] [/ with_red_black_flag_gen]
+
Added: sandbox/tree_node/libs/tree_node/doc/reference.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/reference.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,117 @@
+[/=============================================================================
+    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])
+=============================================================================/]
+
+[section Reference]
+
+[include ref_binary_node.qbk]
+[include ref_binary_node_base.qbk]
+[include ref_binary_node_gen.qbk]
+[include ref_nary_node.qbk]
+[include ref_nary_node_base.qbk]
+[include ref_nary_node_gen.qbk]
+[include ref_associative_node.qbk]
+[include ref_associative_node_base.qbk]
+[include ref_associative_node_gen.qbk]
+[include ref_with_count.qbk]
+[include ref_with_count_base.qbk]
+[include ref_with_count_gen.qbk]
+[include ref_with_height.qbk]
+[include ref_with_height_base.qbk]
+[include ref_with_height_gen.qbk]
+[include ref_with_position.qbk]
+[include ref_with_position_base.qbk]
+[include ref_with_position_gen.qbk]
+[include ref_with_rb_flag.qbk]
+[include ref_with_rb_flag_base.qbk]
+[include ref_with_rb_flag_gen.qbk]
+[include ref_tree_node_base.qbk]
+[include ref_breadth_first_iterator.qbk]
+[include ref_breadth_first_desc_iter.qbk]
+[include ref_pre_order_iterator.qbk]
+[include ref_pre_order_desc_iter.qbk]
+[include ref_post_order_iterator.qbk]
+[include ref_post_order_desc_iter.qbk]
+[include ref_in_order_iterator.qbk]
+[include ref_depth_first_iterator.qbk]
+[include ref_depth_first_desc_iter.qbk]
+[include ref_traversal_state.qbk]
+[include ref_dereference_iterator.qbk]
+[include ref_copy_constructible.qbk]
+[include ref_copyable_and_movable.qbk]
+[include ref_emplace_ctor_header.qbk]
+[include ref_emplace_ctor_fwd_decl.qbk]
+[include ref_emplace_ctor_base_fwd.qbk]
+[include ref_emplace_ctor_inline_hdr.qbk]
+[include ref_emplace_ctor_inline_def.qbk]
+
+[heading Data Structures]
+
+  * __binary_node__
+  * __nary_node__
+  * __associative_node__
+
+[heading Adaptor Types]
+
+  * __tree_node_with_count__
+  * __tree_node_with_height__
+  * __tree_node_with_position__
+  * __tree_node_with_red_black_flag__
+
+[heading Base Types]
+
+  * __tree_node_base__
+  * __binary_node_base__
+  * __nary_node_base__
+  * __associative_node_base__
+  * __tree_node_with_count_base__
+  * __tree_node_with_height_base__
+  * __tree_node_with_position_base__
+  * __tree_node_with_red_black_flag_base__
+
+[heading Type Generators]
+
+  * __binary_node_gen__
+  * __nary_node_gen__
+  * __associative_node_gen__
+  * __tree_node_with_count_gen__
+  * __tree_node_with_height_gen__
+  * __tree_node_with_position_gen__
+  * __tree_node_with_red_black_flag_gen__
+
+[heading Iterator Types]
+
+  * __breadth_first_iterator__
+  * __breadth_first_descendant_iterator__
+  * __pre_order_iterator__
+  * __pre_order_descendant_iterator__
+  * __post_order_iterator__
+  * __post_order_descendant_iterator__
+  * __in_order_iterator__
+  * __depth_first_iterator__
+  * __depth_first_descendant_iterator__
+
+[heading Enum Types]
+
+  * __traversal_state__
+
+[heading Functions]
+
+  * __dereference_iterator__
+
+[heading Macros]
+
+  * __TREE_NODE_COPY_CONSTRUCTIBLE__
+  * __TREE_NODE_COPYABLE_AND_MOVABLE__
+  * __TREE_NODE_EMPLACEMENT_CTOR_HEADER__
+  * __TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL__
+  * __TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD__
+  * __TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__
+  * __TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF__
+
+[endsect] [/ Reference]
+
Added: sandbox/tree_node/libs/tree_node/doc/tree_node.qbk
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/doc/tree_node.qbk	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,245 @@
+[library tree_node
+    [quickbook 1.5]
+    [version 0.4]
+    [authors [Enage, Cromwell D.]]
+    [copyright 2011-2012 Cromwell D. Enage]
+    [purpose Low-level tree node framework]
+    [license
+        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])
+    ]
+]
+
+[/ General links.]
+[def __Runtime_Complexity__ [@http://en.wikipedia.org/wiki/Amortized_analysis Runtime Complexity]]
+
+[/ General concept links.]
+[def __Default_Constructible__ [@http://www.sgi.com/tech/stl/DefaultConstructible.html [*Default Constructible]]]
+[def __Trivial_Iterator__ [@http://www.sgi.com/tech/stl/trivial.html [*Trivial Iterator]]]
+[def __Input_Iterator__ [@http://www.sgi.com/tech/stl/InputIterator.html [*Input Iterator]]]
+[def __Forward_Iterator__ [@http://www.sgi.com/tech/stl/ForwardIterator.html [*Forward Iterator]]]
+[def __Reverse_Iterator__ [@http://www.sgi.com/tech/stl/ReverseIterator.html [*Reverse Iterator]]]
+[def __Bidirectional_Iterator__ [@http://www.sgi.com/tech/stl/BidirectionalIterator.html [*Bidirectional Iterator]]]
+[def __Container__ [@http://www.sgi.com/tech/stl/Container.html [*Container]]]
+[def __Associative_Container__ [@http://www.sgi.com/tech/stl/AssociativeContainer.html [*Associative Container]]]
+[def __Unary_Function__ [@http://www.sgi.com/tech/stl/UnaryFunction.html [*Unary Function]]]
+[def __Equality_Comparable__ [@http://www.sgi.com/tech/stl/EqualityComparable.html [*Equality Comparable]]]
+[def __Less_Than_Comparable__ [@http://www.sgi.com/tech/stl/LessThanComparable.html [*Less-Than Comparable]]]
+
+[/ Boost library and installation links.]
+[def __Boost_PP__ [@boost:libs/preprocessor/doc/index.html [*Boost.PP]]]
+[def __Boost_Preprocessor__ [@boost:libs/preprocessor/doc/index.html [*Boost.Preprocessor]]]
+[def __Boost_Range__ [@boost:libs/range/doc/html/index.html [*Boost.Range]]]
+[def __Boost_Pointer_Container__ [@boost:libs/ptr_container/doc/index.html [*Boost.PointerContainer]]]
+[def __Build__ [@boost:more/getting_started.html Build]]
+[def __build__ [@boost:more/getting_started.html build]]
+[def __Boost_Test__ [@boost:libs/test/doc/index.html [*Boost.Test]]]
+[def __SVN_Trac__ [@http://svn.boost.org/ SVN Trac]]
+[def __Boost_ContainerGen__ [@http://svn.boost.org/svn/boost/sandbox/container_gen/libs/container_gen/doc/html/index.html [*Boost.ContainerGen]]]
+
+[/ Boost concept links.]
+[def __Copy_Constructible__ [@boost:libs/utility/CopyConstructible.html [*Copy Constructible]]]
+[def __Assignable__ [@boost:libs/utility/Assignable.html [*Assignable]]]
+[def __Movable__ [@boost:doc/html/move.html [*Movable]]]
+[def __Boolean_Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*Boolean Integral Constant]]]
+[def __Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Metafunction Class]]]
+[def __Binary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Binary Metafunction Class]]]
+[def __Trinary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Trinary Metafunction Class]]]
+
+[/ Boost reference links.]
+[def __PP_REPEAT__ [@boost:libs/preprocessor/doc/ref/repeat.html `BOOST_PP_REPEAT`]]
+[def _PP_REPEAT_ [@boost:libs/preprocessor/doc/ref/repeat.html BOOST_PP_REPEAT]]
+[def __mpl_true__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::true_`]]
+[def _mpl_true_ [@boost:libs/mpl/doc/refmanual/bool.html boost::mpl::true_]]
+[def __mpl_false__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::false_`]]
+[def _mpl_false_ [@boost:libs/mpl/doc/refmanual/bool.html boost::mpl::false_]]
+[def _mpl_apply_wrap2_ [@boost:libs/mpl/doc/refmanual/apply-wrap.html boost::mpl::apply_wrap2]]
+[def _mpl_apply_wrap3_ [@boost:libs/mpl/doc/refmanual/apply-wrap.html boost::mpl::apply_wrap3]]
+[def _mpl_equal_to_ [@boost:libs/mpl/doc/refmanual/equal_to.html boost::mpl::equal_to]]
+[def _enable_if_ [@boost:libs/utility/enable_if.html `enable_if`]]
+[def _is_recursive_selector_ [@http://svn.boost.org/svn/boost/sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html is_recursive_selector]]
+[def _is_associative_selector_ [@http://svn.boost.org/svn/boost/sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html is_associative_selector]]
+[def __ptr_dequeS__ [@http://svn.boost.org/svn/boost/sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html `ptr_dequeS`]]
+[def __ptr_mapS__ [@http://svn.boost.org/svn/boost/sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html `ptr_mapS`]]
+
+[/ Boost.TreeNode header and source file links.]
+[def __boost_tree_node_base_hpp__ [@../../../../boost/tree_node/base.hpp boost/tree_node/base.hpp]]
+[def __boost_tree_node_preprocessor_hpp__ [@../../../../boost/tree_node/preprocessor.hpp boost/tree_node/preprocessor.hpp]]
+[def __boost_tree_node_binary_node_hpp__ [@../../../../boost/tree_node/binary_node.hpp boost/tree_node/binary_node.hpp]]
+[def __boost_tree_node_nary_node_hpp__ [@../../../../boost/tree_node/nary_node.hpp boost/tree_node/nary_node.hpp]]
+[def __boost_tree_node_associative_node_hpp__ [@../../../../boost/tree_node/associative_node.hpp boost/tree_node/associative_node.hpp]]
+[def __boost_tree_node_with_count_hpp__ [@../../../../boost/tree_node/with_count.hpp boost/tree_node/with_count.hpp]]
+[def __boost_tree_node_with_height_hpp__ [@../../../../boost/tree_node/with_height.hpp boost/tree_node/with_height.hpp]]
+[def __boost_tree_node_with_position_hpp__ [@../../../../boost/tree_node/with_position.hpp boost/tree_node/with_position.hpp]]
+[def __boost_tree_node_with_red_black_flag_hpp__ [@../../../../boost/tree_node/with_red_black_flag.hpp boost/tree_node/with_red_black_flag.hpp]]
+[def __boost_tree_node_breadth_first_iterator_hpp__ [@../../../../boost/tree_node/breadth_first_iterator.hpp boost/tree_node/breadth_first_iterator.hpp]]
+[def __boost_tree_node_breadth_first_desc_iterator_hpp__ [@../../../../boost/tree_node/breadth_first_iterator.hpp boost/tree_node/breadth_first_desc_iterator.hpp]]
+[def __boost_tree_node_pre_order_iterator_hpp__ [@../../../../boost/tree_node/pre_order_iterator.hpp boost/tree_node/pre_order_iterator.hpp]]
+[def __boost_tree_node_pre_order_desc_iterator_hpp__ [@../../../../boost/tree_node/pre_order_iterator.hpp boost/tree_node/pre_order_desc_iterator.hpp]]
+[def __boost_tree_node_post_order_iterator_hpp__ [@../../../../boost/tree_node/post_order_iterator.hpp boost/tree_node/post_order_iterator.hpp]]
+[def __boost_tree_node_post_order_desc_iterator_hpp__ [@../../../../boost/tree_node/post_order_iterator.hpp boost/tree_node/post_order_desc_iterator.hpp]]
+[def __boost_tree_node_in_order_iterator_hpp__ [@../../../../boost/tree_node/in_order_iterator.hpp boost/tree_node/in_order_iterator.hpp]]
+[def __boost_tree_node_depth_first_iterator_hpp__ [@../../../../boost/tree_node/depth_first_iterator.hpp boost/tree_node/depth_first_iterator.hpp]]
+[def __boost_tree_node_depth_first_desc_iterator_hpp__ [@../../../../boost/tree_node/depth_first_iterator.hpp boost/tree_node/depth_first_desc_iterator.hpp]]
+[def __boost_tree_node_traversal_state_hpp__ [@../../../../boost/tree_node/traversal_state.hpp boost/tree_node/traversal_state.hpp]]
+[def __boost_tree_node_algorithm_dereference_iterator_hpp__ [@../../../../boost/tree_node/algorithm/dereference_iterator.hpp boost/tree_node/algorithm/dereference_iterator.hpp]]
+[def __example_default_unconstruct_type_hpp__ [@../../example/default_unconstruct_type.hpp example/default_unconstruct_type.hpp]]
+[def __example_default_unconstruct_type_cpp__ [@../../example/default_unconstruct_type.cpp example/default_unconstruct_type.cpp]]
+[def __example_show_functions_hpp__ [@../../example/show_functions.hpp example/show_functions.hpp]]
+[def __example_show_functions_cpp__ [@../../example/show_functions.cpp example/show_functions.cpp]]
+[def __example_showcase_iterators_hpp__ [@../../example/showcase_iterators.hpp example/showcase_iterators.hpp]]
+[def __example_showcase_assoc_iterators_hpp__ [@../../example/showcase_assoc_iterators.hpp example/showcase_assoc_iterators.hpp]]
+[def __example_match_predicate_hpp__ [@../../example/match_predicate.hpp example/match_predicate.hpp]]
+[def __example_binary_node_cpp__ [@../../example/binary_node.cpp example/binary_node.cpp]]
+[def __example_nary_node_cpp__ [@../../example/nary_node.cpp example/nary_node.cpp]]
+[def __example_associative_node_cpp__ [@../../example/associative_node.cpp example/associative_node.cpp]]
+[def __test_binary_node_cpp__ [@../../test/binary_node.cpp test/binary_node.cpp]]
+[def __test_nary_node_cpp__ [@../../test/nary_node.cpp test/nary_node.cpp]]
+[def __test_associative_node_cpp__ [@../../test/associative_node.cpp test/associative_node.cpp]]
+
+[/ Boost.TreeNode concept links.]
+[def __Tree_Node__ [link tree_node.concepts.tree_node [*Tree Node]]]
+[def __Base_Tree_Node__ [link tree_node.concepts.base_tree_node [*Base Tree Node]]]
+[def __Associative_Tree_Node__ [link tree_node.concepts.associative_tree_node [*Associative Tree Node]]]
+[def __Non_Associative_Tree_Node__ [link tree_node.concepts.non_assoc_tree_node [*Non-Associative Tree Node]]]
+[def __Binary_Tree_Node__ [link tree_node.concepts.binary_tree_node [*Binary Tree Node]]]
+[def __N_ary_Tree_Node__ [link tree_node.concepts.nary_tree_node [*N-ary Tree Node]]]
+[def __Type_Generator__ [link tree_node.concepts.type_generator [*Type Generator]]]
+[def __Tree_Node_Iterator__ [link tree_node.concepts.tree_node_iterator [*Tree Node Iterator]]]
+[def __Full_Tree_Node_Iterator__ [link tree_node.concepts.full_tree_node_iterator [*Full Tree Node Iterator]]]
+[def __Tree_Node_Descendant_Iterator__ [link tree_node.concepts.tree_node_desc_iterator [*Tree Node Descendant Iterator]]]
+
+[/ Boost.TreeNode reference links.]
+[def __tree_node_base__ [link tree_node.reference.tree_node_base `tree_node_base`]]
+[def _tree_node_base_ [link tree_node.reference.tree_node_base tree_node_base]]
+[def __binary_node_base__ [link tree_node.reference.binary_node_base `binary_node_base`]]
+[def _binary_node_base_ [link tree_node.reference.binary_node_base binary_node_base]]
+[def __binary_node__ [link tree_node.reference.binary_node `binary_node`]]
+[def _binary_node_ [link tree_node.reference.binary_node binary_node]]
+[def __binary_node_gen__ [link tree_node.reference.binary_node_gen `binary_node_gen`]]
+[def _binary_node_gen_ [link tree_node.reference.binary_node_gen binary_node_gen]]
+[def __nary_node_base__ [link tree_node.reference.nary_node_base `nary_node_base`]]
+[def _nary_node_base_ [link tree_node.reference.nary_node_base nary_node_base]]
+[def __nary_node__ [link tree_node.reference.nary_node `nary_node`]]
+[def _nary_node_ [link tree_node.reference.nary_node nary_node]]
+[def __nary_node_gen__ [link tree_node.reference.nary_node_gen `nary_node_gen`]]
+[def _nary_node_gen_ [link tree_node.reference.nary_node_gen nary_node_gen]]
+[def __associative_node_base__ [link tree_node.reference.associative_node_base `associative_node_base`]]
+[def _associative_node_base_ [link tree_node.reference.associative_node_base associative_node_base]]
+[def __associative_node__ [link tree_node.reference.associative_node `associative_node`]]
+[def _associative_node_ [link tree_node.reference.associative_node associative_node]]
+[def __associative_node_gen__ [link tree_node.reference.associative_node_gen `associative_node_gen`]]
+[def _associative_node_gen_ [link tree_node.reference.associative_node_gen associative_node_gen]]
+[def __tree_node_with_count_base__ [link tree_node.reference.with_count_base `with_count_base`]]
+[def _tree_node_with_count_base_ [link tree_node.reference.with_count_base with_count_base]]
+[def __tree_node_with_count__ [link tree_node.reference.with_count `with_count`]]
+[def _tree_node_with_count_ [link tree_node.reference.with_count with_count]]
+[def __tree_node_with_count_gen__ [link tree_node.reference.with_count_gen `with_count_gen`]]
+[def _tree_node_with_count_gen_ [link tree_node.reference.with_count_gen with_count_gen]]
+[def __tree_node_with_height_base__ [link tree_node.reference.with_height_base `with_height_base`]]
+[def _tree_node_with_height_base_ [link tree_node.reference.with_height_base with_height_base]]
+[def __tree_node_with_height__ [link tree_node.reference.with_height `with_height`]]
+[def _tree_node_with_height_ [link tree_node.reference.with_height with_height]]
+[def __tree_node_with_height_gen__ [link tree_node.reference.with_height_gen `with_height_gen`]]
+[def _tree_node_with_height_gen_ [link tree_node.reference.with_height_gen with_height_gen]]
+[def __tree_node_with_position_base__ [link tree_node.reference.with_position_base `with_position_base`]]
+[def _tree_node_with_position_base_ [link tree_node.reference.with_position_base with_position_base]]
+[def __tree_node_with_position__ [link tree_node.reference.with_position `with_position`]]
+[def _tree_node_with_position_ [link tree_node.reference.with_position with_position]]
+[def __tree_node_with_position_gen__ [link tree_node.reference.with_position_gen `with_position_gen`]]
+[def _tree_node_with_position_gen_ [link tree_node.reference.with_position_gen with_position_gen]]
+[def __tree_node_with_red_black_flag_base__ [link tree_node.reference.with_rb_flag_base `with_red_black_flag_base`]]
+[def _tree_node_with_red_black_flag_base_ [link tree_node.reference.with_rb_flag_base with_red_black_flag_base]]
+[def __tree_node_with_red_black_flag__ [link tree_node.reference.with_rb_flag `with_red_black_flag`]]
+[def _tree_node_with_red_black_flag_ [link tree_node.reference.with_rb_flag with_red_black_flag]]
+[def __tree_node_with_red_black_flag_gen__ [link tree_node.reference.with_rb_flag `with_red_black_flag_gen`]]
+[def _tree_node_with_red_black_flag_gen_ [link tree_node.reference.with_rb_flag with_red_black_flag_gen]]
+[def __breadth_first_iterator__ [link tree_node.reference.breadth_first_iterator `breadth_first_iterator`]]
+[def _breadth_first_iterator_ [link tree_node.reference.breadth_first_iterator breadth_first_iterator]]
+[def __breadth_first_descendant_iterator__ [link tree_node.reference.breadth_first_desc_iter `breadth_first_descendant_iterator`]]
+[def _breadth_first_descendant_iterator_ [link tree_node.reference.breadth_first_desc_iter breadth_first_descendant_iterator]]
+[def __pre_order_iterator__ [link tree_node.reference.pre_order_iterator `pre_order_iterator`]]
+[def _pre_order_iterator_ [link tree_node.reference.pre_order_iterator pre_order_iterator]]
+[def __pre_order_descendant_iterator__ [link tree_node.reference.pre_order_desc_iter `pre_order_descendant_iterator`]]
+[def _pre_order_descendant_iterator_ [link tree_node.reference.pre_order_desc_iter pre_order_descendant_iterator]]
+[def __post_order_iterator__ [link tree_node.reference.post_order_iterator `post_order_iterator`]]
+[def _post_order_iterator_ [link tree_node.reference.post_order_iterator post_order_iterator]]
+[def __post_order_descendant_iterator__ [link tree_node.reference.post_order_desc_iter `post_order_descendant_iterator`]]
+[def _post_order_descendant_iterator_ [link tree_node.reference.post_order_desc_iter post_order_descendant_iterator]]
+[def __in_order_iterator__ [link tree_node.reference.in_order_iterator `in_order_iterator`]]
+[def _in_order_iterator_ [link tree_node.reference.in_order_iterator in_order_iterator]]
+[def __depth_first_iterator__ [link tree_node.reference.depth_first_iterator `depth_first_iterator`]]
+[def _depth_first_iterator_ [link tree_node.reference.depth_first_iterator depth_first_iterator]]
+[def __depth_first_descendant_iterator__ [link tree_node.reference.depth_first_desc_iter `depth_first_descendant_iterator`]]
+[def _depth_first_descendant_iterator_ [link tree_node.reference.depth_first_desc_iter depth_first_descendant_iterator]]
+[def __traversal_state__ [link tree_node.reference.traversal_state `traversal_state`]]
+[def _traversal_state_ [link tree_node.reference.traversal_state traversal_state]]
+[def __dereference_iterator__ [link tree_node.reference.dereference_iterator `dereference_iterator()`]]
+[def _dereference_iterator_ [link tree_node.reference.dereference_iterator dereference_iterator]]
+[def __TREE_NODE_COPY_CONSTRUCTIBLE__ [link tree_node.reference.copy_constructible `BOOST_TREE_NODE_COPY_CONSTRUCTIBLE`]]
+[def __TREE_NODE_COPYABLE_AND_MOVABLE__ [link tree_node.reference.copyable_and_movable `BOOST_TREE_NODE_COPYABLE_AND_MOVABLE`]]
+[def __TREE_NODE_EMPLACEMENT_CTOR_HEADER__ [link tree_node.reference.emplace_ctor_header `BOOST_TREE_NODE_EMPLACEMENT_CTOR_HEADER`]]
+[def __TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL__ [link tree_node.reference.emplace_ctor_fwd_decl `BOOST_TREE_NODE_EMPLACEMENT_CTOR_FWD_DECL`]]
+[def __TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD__ [link tree_node.reference.emplace_ctor_base_fwd `BOOST_TREE_NODE_EMPLACEMENT_CTOR_BASE_FWD`]]
+[def __TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER__ [link tree_node.reference.emplace_ctor_inline_hdr `BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_HEADER`]]
+[def __TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF__ [link tree_node.reference.emplace_ctor_inline_def `BOOST_TREE_NODE_EMPLACEMENT_CTOR_INLINE_DEF`]]
+
+[/ Autogenerate concept and reference documentation directly from code.]
+[/ Bypass Doxygen.]
+[import ../../../boost/tree_node/base.hpp]
+[import ../../../boost/tree_node/binary_node.hpp]
+[import ../../../boost/tree_node/nary_node.hpp]
+[import ../../../boost/tree_node/associative_node.hpp]
+[import ../../../boost/tree_node/with_count.hpp]
+[import ../../../boost/tree_node/with_height.hpp]
+[import ../../../boost/tree_node/with_position.hpp]
+[import ../../../boost/tree_node/with_red_black_flag.hpp]
+[import ../../../boost/tree_node/breadth_first_iterator.hpp]
+[import ../../../boost/tree_node/breadth_first_desc_iterator.hpp]
+[import ../../../boost/tree_node/pre_order_iterator.hpp]
+[import ../../../boost/tree_node/pre_order_desc_iterator.hpp]
+[import ../../../boost/tree_node/post_order_iterator.hpp]
+[import ../../../boost/tree_node/post_order_desc_iterator.hpp]
+[import ../../../boost/tree_node/in_order_iterator.hpp]
+[import ../../../boost/tree_node/depth_first_iterator.hpp]
+[import ../../../boost/tree_node/depth_first_desc_iterator.hpp]
+[import ../../../boost/tree_node/traversal_state.hpp]
+[import ../../../boost/tree_node/algorithm/dereference_iterator.hpp]
+[import ../../../boost/tree_node/preprocessor.hpp]
+[import ../example/default_unconstruct_type.hpp]
+[import ../example/default_unconstruct_type.cpp]
+[import ../example/show_functions.hpp]
+[import ../example/show_functions.cpp]
+[import ../example/showcase_iterators.hpp]
+[import ../example/showcase_assoc_iterators.hpp]
+[import ../example/match_predicate.hpp]
+[import ../example/binary_node.cpp]
+[import ../example/nary_node.cpp]
+[import ../example/associative_node.cpp]
+
+[/ index.html Start]
+
+[heading Rationale]
+Over the course of reimplementing a decision tree learning algorithm to use
+modern C++ techniques, the need for a generic tree library became evident.  The
+in-house data structures in use at the time were undergoing modification as
+well.  It was found that the core operations occurred at the node level rather
+than at the tree level, which stored only high-level algorithms.  Efforts went
+underway to retrofit these algorithms to use iterators and to further factor
+out generic data structures from the decision tree components and other
+application-specific utilities.  This library represents the Boostified
+culmination of these efforts.
+
+[important
+    This library depends on __Boost_ContainerGen__, which is not yet a part
+    of Boost.  For now, you must perform a Subversion checkout from the
+    __SVN_Trac__.
+]
+
+[/ index.html End]
+
+[include concepts.qbk]
+[include reference.qbk]
+[include changelog.qbk]
+
Added: sandbox/tree_node/libs/tree_node/example/associative_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/associative_node.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,389 @@
+// 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 <cstring>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/algorithm/find_if.hpp>
+#include <boost/typeof/typeof.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/typeof/breadth_first_iterator.hpp>
+#include <boost/tree_node/typeof/breadth_first_desc_iterator.hpp>
+#include <boost/tree_node/typeof/pre_order_iterator.hpp>
+#include <boost/tree_node/typeof/post_order_iterator.hpp>
+#include <boost/tree_node/typeof/depth_first_iterator.hpp>
+#include <boost/tree_node/algorithm/dereference_iterator.hpp>
+#include "default_unconstruct_type.hpp"
+#include "show_functions.hpp"
+#include "showcase_assoc_iterators.hpp"
+#include "match_predicate.hpp"
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/std/string.hpp>
+#else
+#include <string>
+#endif
+typedef std::string TestString;
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/boost/container/string.hpp>
+#else
+#include <boost/container/string.hpp>
+#endif
+typedef boost::container::string TestString;
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template <typename USelector, typename MSelector>
+void example()
+{
+    typedef boost::tree_node::associative_node<
+                char const*
+              , default_unconstructible_example_type
+              , USelector
+            >
+            DNode;
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::associative_node_gen<MSelector>
+                    >
+                >
+              , char const*
+              , TestString
+            >
+            ANode;
+
+    char const* names[] = {"able", "baker", "charlie", "dog", "easy", "fox"};
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_ASSERT_MSG(
+        !d_root.get_parent_ptr()
+      , "Parent member uninitialized."
+    );
+    BOOST_ASSERT_MSG(
+        a_root.get_data().empty()
+      , "Data member not default-constructed."
+    );
+
+    for (
+        BOOST_AUTO_TPL(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(d_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            for (std::size_t i = 0; i < count; ++i)
+            {
+                for (std::size_t j = 0; j + i < count; ++j)
+                {
+                    typename DNode::iterator find_itr(itr->find(names[j]));
+                    bool not_found = find_itr == itr->end();
+                    typename DNode::iterator child_itr(
+                        itr->emplace(names[j], i)
+                    );
+                    DNode& child(
+                        boost::tree_node::dereference_iterator(child_itr)
+                    );
+                    DNode const& const_child(child);
+
+                    if (not_found)
+                    {
+                        BOOST_ASSERT_MSG(
+                            (child.get_parent_ptr() == &*itr)
+                          , "Ctor not linking child to parent."
+                        );
+                        BOOST_ASSERT_MSG(
+                            (
+                                child.get_parent_ptr()
+                             == const_child.get_parent_ptr()
+                            )
+                          , "Why are these pointers different?"
+                        );
+                    }
+                    else
+                    {
+                        BOOST_ASSERT_MSG(
+                            (find_itr->first == child_itr->first)
+                          , "Keys do not match."
+                        );
+                        BOOST_ASSERT_MSG(
+                            (
+                                boost::tree_node::dereference_iterator(
+                                    find_itr
+                                ).get_data()
+                             == const_child.get_data()
+                            )
+                          , "Ctor not linking parent to child."
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    std::cout << "After d_root tree construction," << std::endl;
+    showcase_associative_iterators(
+        d_root
+      , show_number<DNode>
+      , show_number_tree()
+      , show_key_and_number<char const*,DNode>
+      , show_key_and_number_tree()
+    );
+
+    {
+        DNode d_copy(d_root);
+
+        std::cout << "After d_copy construction," << std::endl;
+        showcase_associative_iterators(
+            d_copy
+          , show_number<DNode>
+          , show_number_tree()
+          , show_key_and_number<char const*,DNode>
+          , show_key_and_number_tree()
+        );
+    }
+
+    {
+        typename DNode::iterator d_child_itr(
+            boost::tree_node::dereference_iterator(
+                d_root.find(names[2])
+            ).insert(names[5], d_root)
+        );
+
+        std::cout << "After insert call," << std::endl;
+        showcase_associative_iterators(
+            d_root
+          , show_number<DNode>
+          , show_number_tree()
+          , show_key_and_number<char const*,DNode>
+          , show_key_and_number_tree()
+        );
+
+        boost::tree_node::dereference_iterator(d_child_itr) = d_root;
+        std::cout << "After assignment to ancestor," << std::endl;
+        showcase_associative_iterators(
+            d_root
+          , show_number<DNode>
+          , show_number_tree()
+          , show_key_and_number<char const*,DNode>
+          , show_key_and_number_tree()
+        );
+    }
+
+    d_root = boost::tree_node::dereference_iterator(d_root.find(names[4]));
+    std::cout << "After assignment to descendant," << std::endl;
+    showcase_associative_iterators(
+        d_root
+      , show_number<DNode>
+      , show_number_tree()
+      , show_key_and_number<char const*,DNode>
+      , show_key_and_number_tree()
+    );
+
+    a_root.get_data() = "5";
+
+    for (
+        BOOST_AUTO_TPL(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(a_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            char numchar = digit;
+
+            while (numchar != '0')
+            {
+                --numchar;
+
+                for (char j = 0; numchar + j < digit; ++j)
+                {
+                    typename ANode::iterator child_itr(itr->emplace(names[j]));
+                    typename ANode::traits::iterator_range c_range(
+                        itr->equal_range(names[j])
+                    );
+                    ANode& child(
+                        boost::tree_node::dereference_iterator(child_itr)
+                    );
+                    TestString& data = child.get_data();
+
+                    BOOST_ASSERT_MSG(
+                        data.empty()
+                      , "Data member not default-constructed."
+                    );
+                    data += numchar;
+                    BOOST_ASSERT_MSG(
+                        (child.get_parent_ptr() == &*itr)
+                      , "Ctor not linking child to parent."
+                    );
+                    BOOST_ASSERT_MSG(
+                        (child.get_position() == child_itr)
+                      , "Position iterator incorrect."
+                    );
+                    BOOST_ASSERT_MSG(
+                        (
+                            boost::range::find_if(
+                                c_range
+                              , example_match_predicate<ANode,MSelector>(
+                                    child_itr
+                                )
+                            )
+                         != boost::end(c_range)
+                        )
+                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    std::cout << "After a_root tree construction," << std::endl;
+    showcase_associative_iterators(
+        a_root
+      , show_data<ANode>
+      , show_data_tree()
+      , show_key_and_data<char const*,ANode>
+      , show_key_and_data_tree()
+    );
+
+    {
+        ANode a_copy(a_root);
+        std::cout << "After copy construction," << std::endl;
+        showcase_associative_iterators(
+            a_copy
+          , show_data<ANode>
+          , show_data_tree()
+          , show_key_and_data<char const*,ANode>
+          , show_key_and_data_tree()
+        );
+    }
+
+    {
+        typename ANode::iterator a_child_itr(
+            boost::tree_node::dereference_iterator(
+                a_root.find(names[2])
+            ).emplace(names[5])
+        );
+        ANode& a_child(boost::tree_node::dereference_iterator(a_child_itr));
+
+        BOOST_ASSERT_MSG(
+            (a_child.get_position() == a_child_itr)
+          , "Position iterator incorrect."
+        );
+        a_child.get_data().push_back('7');
+        std::cout << "After emplace call," << std::endl;
+        showcase_associative_iterators(
+            a_root
+          , show_data<ANode>
+          , show_data_tree()
+          , show_key_and_data<char const*,ANode>
+          , show_key_and_data_tree()
+        );
+
+        a_child = a_root;
+        std::cout << "After assignment to ancestor," << std::endl;
+        showcase_associative_iterators(
+            a_root
+          , show_data<ANode>
+          , show_data_tree()
+          , show_key_and_data<char const*,ANode>
+          , show_key_and_data_tree()
+        );
+
+        a_root = a_child;
+        std::cout << "After assignment to descendant," << std::endl;
+        showcase_associative_iterators(
+            a_root
+          , show_data<ANode>
+          , show_data_tree()
+          , show_key_and_data<char const*,ANode>
+          , show_key_and_data_tree()
+        );
+    }
+
+    std::cout << "After " << boost::tree_node::dereference_iterator(
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || defined LIBS_TREE_NODE_EXAMPLE_ASSOCIATIVE_NODE_USE_FLAT_MAP
+        a_root.begin()
+#else
+        a_root.find(names[0])
+#endif
+    ).erase(names[1]) << " nodes erased with their descendants," << std::endl;
+    showcase_associative_iterators(
+        a_root
+      , show_data<ANode>
+      , show_data_tree()
+      , show_key_and_data<char const*,ANode>
+      , show_key_and_data_tree()
+    );
+}
+
+#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/std/tr1/unordered_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()
+{
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    example<
+        boost::ptr_map_selector<boost::c_str_ordering_selector>
+      , boost::ptr_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#elif defined LIBS_TREE_NODE_EXAMPLE_ASSOCIATIVE_NODE_USE_FLAT_MAP
+    example<
+        boost::flat_map_selector<boost::c_str_ordering_selector>
+      , boost::flat_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#else
+    example<
+        boost::hash_map_selector<
+            boost::mpl::true_
+          , boost::tr1_hash_selector
+          , boost::c_str_equivalence_selector
+        >
+      , boost::hash_multimap_selector<
+            boost::mpl::true_
+          , boost::tr1_hash_selector
+          , boost::c_str_equivalence_selector
+        >
+    >();
+#endif
+
+    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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,262 @@
+// 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/assert.hpp>
+#include <boost/typeof/typeof.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/typeof/breadth_first_iterator.hpp>
+#include <boost/tree_node/typeof/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/typeof/post_order_iterator.hpp>
+#include "default_unconstruct_type.hpp"
+#include "show_functions.hpp"
+#include "showcase_iterators.hpp"
+
+typedef boost::tree_node::binary_node<default_unconstructible_example_type>
+        DNode;
+typedef boost::tree_node::with_height<
+            boost::tree_node::with_count_gen<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::binary_node_gen
+                >
+            >
+          , char*
+        >
+        ANode;
+
+int main()
+{
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_ASSERT_MSG(
+        !d_root.get_parent_ptr()
+      , "Parent member uninitialized."
+    );
+    BOOST_ASSERT_MSG(
+        !a_root.get_data()
+      , "Data member not default-constructed."
+    );
+
+    for (
+        BOOST_AUTO(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(d_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            DNode::iterator child_itr(itr->emplace_left(count - 2));
+            DNode::const_pointer const_child(&*child_itr);
+
+            BOOST_ASSERT_MSG(
+                (child_itr->get_parent_ptr() == &*itr)
+              , "Ctor not linking child to parent."
+            );
+            BOOST_ASSERT_MSG(
+                (itr->get_left_child_ptr() == &*child_itr)
+              , "Ctor not linking parent to child."
+            );
+            BOOST_ASSERT_MSG(
+                (child_itr->get_parent_ptr() == const_child->get_parent_ptr())
+              , "Why are these pointers different?"
+            );
+
+            child_itr = itr->emplace_right(count - 1);
+            const_child = &*child_itr;
+
+            BOOST_ASSERT_MSG(
+                (child_itr->get_parent_ptr() == &*itr)
+              , "Ctor not linking child to parent."
+            );
+            BOOST_ASSERT_MSG(
+                (itr->get_right_child_ptr() == &*child_itr)
+              , "Ctor not linking parent to child."
+            );
+            BOOST_ASSERT_MSG(
+                (child_itr->get_parent_ptr() == const_child->get_parent_ptr())
+              , "Why are these pointers different?"
+            );
+        }
+    }
+
+    std::cout << "After d_root tree construction," << std::endl;
+    showcase_in_order_iterator(d_root, show_number<DNode>);
+    showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+    {
+        DNode::pointer p = d_root.get_left_child_ptr()->get_left_child_ptr();
+        DNode::iterator p_child_itr = p->insert_left(d_root);
+
+        std::cout << "After insert_left call," << std::endl;
+        showcase_in_order_iterator(d_root, show_number<DNode>);
+        showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+        d_root = *p_child_itr;
+        std::cout << "After assignment to descendant," << std::endl;
+        showcase_in_order_iterator(d_root, show_number<DNode>);
+        showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+    }
+
+    *(d_root.get_right_child_ptr()) = d_root;
+    std::cout << "After assignment to ancestor," << std::endl;
+    showcase_in_order_iterator(d_root, show_number<DNode>);
+    showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+    d_root.get_right_child_ptr()->rotate_left();
+    std::cout << "After rotate_left call," << std::endl;
+    showcase_in_order_iterator(d_root, show_number<DNode>);
+    showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+    {
+        char* root_data = new char[2];
+
+        root_data[0] = '5';
+        root_data[1] = '\0';
+        a_root.get_data() = root_data;
+    }
+
+    for (
+        BOOST_AUTO(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(a_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            {
+                ANode::iterator child_itr(itr->emplace_left());
+                char*& data = child_itr->get_data();
+
+                BOOST_ASSERT_MSG(
+                    !data
+                  , "Data member not default-constructed."
+                );
+                data = new char[2];
+                data[0] = digit - 1;
+                data[1] = '\0';
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_parent_ptr() == &*itr)
+                  , "Ctor not linking child to parent."
+                );
+                BOOST_ASSERT_MSG(
+                    (itr->get_left_child_ptr() == &*child_itr)
+                  , "Ctor not linking parent to child."
+                );
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_position() == child_itr)
+                  , "Position iterator incorrect."
+                );
+            }
+
+            {
+                ANode::iterator child_itr(itr->emplace_right());
+                char*& data = child_itr->get_data();
+
+                BOOST_ASSERT_MSG(
+                    !data
+                  , "Data member not default-constructed."
+                );
+                data = new char[2];
+                data[0] = digit - 2;
+                data[1] = '\0';
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_parent_ptr() == &*itr)
+                  , "Ctor not linking child to parent."
+                );
+                BOOST_ASSERT_MSG(
+                    (itr->get_right_child_ptr() == &*child_itr)
+                  , "Ctor not linking parent to child."
+                );
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_position() == child_itr)
+                  , "Position iterator incorrect."
+                );
+            }
+        }
+    }
+
+    std::cout << "After a_root tree construction," << std::endl;
+    showcase_in_order_iterator(a_root, show_data<ANode>);
+    showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+
+    {
+        ANode::pointer p(a_root.get_right_child_ptr()->get_right_child_ptr());
+        ANode::iterator p_child_itr(p->emplace_right());
+
+        BOOST_ASSERT_MSG(
+            (p_child_itr->get_position() == p_child_itr)
+          , "Position iterator incorrect."
+        );
+        BOOST_ASSERT_MSG(
+            (p->begin() == p_child_itr)
+          , "Begin iterator incorrect."
+        );
+        p_child_itr->get_data() = new char[2];
+        p_child_itr->get_data()[0] = '7';
+        p_child_itr->get_data()[1] = '\0';
+        std::cout << "After emplace_right call," << std::endl;
+        showcase_in_order_iterator(a_root, show_data<ANode>);
+        showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+    }
+
+    a_root.get_left_child_ptr()->rotate_right();
+    std::cout << "After rotate_right call," << std::endl;
+    showcase_in_order_iterator(a_root, show_data<ANode>);
+    showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+
+    a_root.get_left_child_ptr()->rotate_left();
+    std::cout << "After rotate_left call," << std::endl;
+    showcase_in_order_iterator(a_root, show_data<ANode>);
+    showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+
+    {
+        ANode::iterator leaf = a_root.begin();
+
+        for (
+            BOOST_AUTO(
+                itr
+              , boost::tree_node::make_pre_order_descendant_iterator(*leaf)
+            );
+            itr;
+            ++itr
+        )
+        {
+            delete[] itr->get_data();
+        }
+
+        leaf->clear();
+        std::cout << "After clear call," << std::endl;
+        showcase_in_order_iterator(a_root, show_data<ANode>);
+        showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+    }
+
+    for (
+        BOOST_AUTO(itr, boost::tree_node::make_post_order_iterator(a_root));
+        itr;
+        ++itr
+    )
+    {
+        delete[] itr->get_data();
+    }
+
+    return 0;
+}
+
Added: sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,38 @@
+// 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;
+}
+//]
+
Added: sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/default_unconstruct_type.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,44 @@
+// 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/match_predicate.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/match_predicate.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,71 @@
+// 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/mpl/bool.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+
+//[example__match_predicate
+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
+{
+    return p.second->get_data() == _itr->second->get_data();
+}
+
+template <typename Node, typename Selector>
+template <typename P>
+inline bool
+    example_match_predicate<Node,Selector>::_evaluate(
+        P const& p
+      , boost::mpl::false_
+    ) const
+{
+    return p.second.get_data() == _itr->second.get_data();
+}
+//]
+
+#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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,266 @@
+// 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 <iterator>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/tr1/type_traits.hpp>
+#include <boost/container_gen/selectors_typeof.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/typeof/breadth_first_iterator.hpp>
+#include <boost/tree_node/typeof/pre_order_desc_iterator.hpp>
+#include <boost/tree_node/typeof/post_order_iterator.hpp>
+#include "default_unconstruct_type.hpp"
+#include "show_functions.hpp"
+#include "showcase_iterators.hpp"
+
+template <typename Selector>
+void example()
+{
+    typedef boost::tree_node::nary_node<
+                default_unconstructible_example_type
+              , Selector
+            >
+            DNode;
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::nary_node_gen<Selector>
+                    >
+                >
+              , char*
+            >
+            ANode;
+
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_ASSERT_MSG(
+        !d_root.get_parent_ptr()
+      , "Parent member uninitialized."
+    );
+    BOOST_ASSERT_MSG(
+        !a_root.get_data()
+      , "Data member not default-constructed."
+    );
+
+    for (
+        BOOST_AUTO_TPL(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(d_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            for (std::size_t i = 0; i < count; ++i)
+            {
+                typename DNode::iterator child_itr(itr->emplace(i));
+                typename DNode::const_pointer const_child(&*child_itr);
+
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_parent_ptr() == &*itr)
+                  , "Ctor not linking child to parent."
+                );
+                BOOST_ASSERT_MSG(
+                    (
+                        child_itr->get_parent_ptr()
+                     == const_child->get_parent_ptr()
+                    )
+                  , "Why are these pointers different?"
+                );
+
+                {
+                    typename DNode::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_ASSERT_MSG(
+                        (&*child_itr == &*c_itr)
+                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    std::cout << "After d_root tree construction," << std::endl;
+    showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+    {
+        DNode d_copy(d_root);
+
+        std::cout << "After d_copy construction," << std::endl;
+        showcase_iterators(d_copy, show_number<DNode>, show_number_tree());
+    }
+
+    {
+        typename DNode::iterator d_child(
+            (++(++d_root.begin()))->insert(d_root)
+        );
+
+        std::cout << "After insert call," << std::endl;
+        showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+        d_root = *d_child;
+        std::cout << "After assignment to descendant," << std::endl;
+        showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+    }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    if (!std::tr1::is_same<Selector,boost::slistS>::value)
+        *(d_root.begin()) = d_root;
+    else
+#endif
+    *(++(++(++(++d_root.begin())))) = d_root;
+    std::cout << "After assignment to ancestor," << std::endl;
+    showcase_iterators(d_root, show_number<DNode>, show_number_tree());
+
+    {
+        char* root_data = new char[2];
+
+        root_data[0] = '5';
+        root_data[1] = '\0';
+        a_root.get_data() = root_data;
+    }
+
+    for (
+        BOOST_AUTO_TPL(
+            itr
+          , boost::tree_node::make_breadth_first_iterator(a_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            char numchar = digit;
+
+            while (numchar != '0')
+            {
+                typename ANode::iterator child_itr(itr->insert(ANode()));
+                char*& data = child_itr->get_data();
+
+                BOOST_ASSERT_MSG(
+                    !data
+                  , "Data member not default-constructed."
+                );
+                data = new char[2];
+                data[0] = --numchar;
+                data[1] = '\0';
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_parent_ptr() == &*itr)
+                  , "Ctor not linking child to parent."
+                );
+                BOOST_ASSERT_MSG(
+                    (child_itr->get_position() == child_itr)
+                  , "Position iterator incorrect."
+                );
+
+                {
+                    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, digit - (numchar + 1));
+                    BOOST_ASSERT_MSG(
+                        (child_itr == c_itr)
+                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    std::cout << "After a_root tree construction," << std::endl;
+    showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+
+    {
+        typename ANode::iterator a_child_itr(
+            (++(++a_root.begin()))->emplace()
+        );
+
+        a_child_itr->get_data() = new char[2];
+        a_child_itr->get_data()[0] = '7';
+        a_child_itr->get_data()[1] = '\0';
+        BOOST_ASSERT_MSG(
+            (a_child_itr->get_position() == a_child_itr)
+          , "Position iterator incorrect."
+        );
+        std::cout << "After emplace call," << std::endl;
+        showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+    }
+
+    {
+        typename ANode::iterator leaf = a_root.begin();
+
+        for (
+            BOOST_AUTO_TPL(
+                itr
+              , boost::tree_node::make_pre_order_descendant_iterator(*leaf)
+            );
+            itr;
+            ++itr
+        )
+        {
+            delete[] itr->get_data();
+        }
+
+        leaf->clear();
+        std::cout << "After clear call," << std::endl;
+        showcase_iterators(a_root, show_data<ANode>, show_data_tree());
+    }
+
+    for (
+        BOOST_AUTO_TPL(
+            itr
+          , boost::tree_node::make_post_order_iterator(a_root)
+        );
+        itr;
+        ++itr
+    )
+    {
+        delete[] itr->get_data();
+    }
+}
+
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors_typeof.hpp>
+#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
+#else  // !defined BOOST_TYPEOF_EMULATION
+#include <boost/container_gen/selectors.hpp>
+#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/show_functions.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/show_functions.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,69 @@
+// 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)
+{
+}
+
Added: sandbox/tree_node/libs/tree_node/example/show_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/show_functions.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,160 @@
+// 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
+
Added: sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/showcase_assoc_iterators.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,104 @@
+// 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
+
Added: sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/example/showcase_iterators.hpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,62 @@
+// 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/test/associative_node.cpp
==============================================================================
--- (empty file)
+++ sandbox/tree_node/libs/tree_node/test/associative_node.cpp	2012-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,3040 @@
+// 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 <utility>
+#include <cstring>
+#include <boost/tuple/tuple.hpp>
+#include <boost/assign/std/deque.hpp>
+#include <boost/assign/list_inserter.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/algorithm/find_if.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.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 "../example/default_unconstruct_type.hpp"
+#include "../example/match_predicate.hpp"
+#include "iterator_functions.hpp"
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/std/string.hpp>
+#else
+#include <string>
+#endif
+typedef std::string
+        TestString;
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/boost/container/string.hpp>
+#else
+#include <boost/container/string.hpp>
+#endif
+typedef boost::container::string
+        TestString;
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+typedef std::deque<std::size_t>
+        Sizes;
+typedef std::deque<std::pair<char const*,std::size_t> >
+        KeySizes;
+typedef std::deque<std::pair<boost::tree_node::traversal_state,std::size_t> >
+        DFSizes;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , char const*
+              , std::size_t
+            >
+        >::type
+        DFKeySizes;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<TestString,std::size_t,std::size_t>
+        >::type
+        Strings;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                char const*
+              , TestString
+              , std::size_t
+              , std::size_t
+            >
+        >::type
+        KeyStrings;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , TestString
+              , std::size_t
+              , std::size_t
+            >
+        >::type
+        DFStrings;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , char const*
+              , TestString
+              , std::size_t
+              , std::size_t
+            >
+        >::type
+        DFKeyStrings;
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        Emplacer;
+
+template <typename USelector, typename MSelector>
+void test()
+{
+    using namespace boost::assign;
+
+    typedef boost::tree_node::associative_node<
+                char const*
+              , default_unconstructible_example_type
+              , USelector
+            >
+            DNode;
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::associative_node_gen<MSelector>
+                    >
+                >
+              , char const*
+              , TestString
+            >
+            ANode;
+
+    char const* names[] = {"able", "baker", "charlie", "dog", "easy", "fox"};
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_CHECK(
+        !d_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+    BOOST_CHECK(
+        a_root.get_data().empty()
+//      , "Data member not default-constructed."
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<DNode> itr(d_root);
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            for (std::size_t i = 0; i < count; ++i)
+            {
+                for (std::size_t j = 0; j + i < count; ++j)
+                {
+                    typename DNode::iterator find_itr(itr->find(names[j]));
+                    bool not_found = find_itr == itr->end();
+                    typename DNode::iterator child_itr(
+                        itr->emplace(names[j], i)
+                    );
+                    DNode& child(
+                        boost::tree_node::dereference_iterator(child_itr)
+                    );
+                    DNode const& const_child(child);
+
+                    if (not_found)
+                    {
+                        BOOST_CHECK(
+                            (child.get_parent_ptr() == &*itr)
+//                          , "Ctor not linking child to parent."
+                        );
+                        BOOST_CHECK(
+                            (
+                                child.get_parent_ptr()
+                             == const_child.get_parent_ptr()
+                            )
+//                          , "Why are these pointers different?"
+                        );
+                    }
+                    else
+                    {
+                        BOOST_CHECK(
+                            (find_itr->first == child_itr->first)
+//                          , "Keys do not match."
+                        );
+                        BOOST_CHECK(
+                            (
+                                boost::tree_node::dereference_iterator(
+                                    find_itr
+                                ).get_data()
+                             == const_child.get_data()
+                            )
+//                          , "Ctor not linking parent to child."
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    {
+        Sizes bf_vals, pre_vals, post_vals;
+        KeySizes bf_d_vals, pre_d_vals, post_d_vals;
+        DFSizes df_vals;
+        DFKeySizes df_d_vals;
+        Emplacer emplacer;
+
+        bf_vals    += 5, 0, 0, 0, 0, 0;
+        boost::assign::push_back(bf_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("dog", 0)("easy", 0);
+        pre_vals   += 5, 0, 0, 0, 0, 0;
+        boost::assign::push_back(pre_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("dog", 0)("easy", 0);
+        post_vals  += 0, 0, 0, 0, 0, 5;
+        boost::assign::push_back(post_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("dog", 0)("easy", 0);
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+            (boost::tree_node::post_order_traversal, 5);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0)
+            (boost::tree_node::post_order_traversal, "able", 0)
+            (boost::tree_node::pre_order_traversal, "baker", 0)
+            (boost::tree_node::post_order_traversal, "baker", 0)
+            (boost::tree_node::pre_order_traversal, "charlie", 0)
+            (boost::tree_node::post_order_traversal, "charlie", 0)
+            (boost::tree_node::pre_order_traversal, "dog", 0)
+            (boost::tree_node::post_order_traversal, "dog", 0)
+            (boost::tree_node::pre_order_traversal, "easy", 0)
+            (boost::tree_node::post_order_traversal, "easy", 0);
+        test_associative_node(
+            d_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    {
+        typename DNode::iterator d_child_itr(
+            boost::tree_node::dereference_iterator(
+                d_root.find(names[2])
+            ).insert(names[5], d_root)
+        );
+        Sizes bf_vals, pre_vals, post_vals;
+        KeySizes bf_d_vals, pre_d_vals, post_d_vals;
+        DFSizes df_vals;
+        DFKeySizes df_d_vals;
+        Emplacer emplacer;
+
+        bf_vals    += 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0;
+        boost::assign::push_back(bf_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("dog", 0)("easy", 0)
+            ("fox", 5)("able", 0)("baker", 0)("charlie", 0)("dog", 0)
+            ("easy", 0);
+        pre_vals   += 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0;
+        boost::assign::push_back(pre_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("fox", 5)("able", 0)
+            ("baker", 0)("charlie", 0)("dog", 0)("easy", 0)("dog", 0)
+            ("easy", 0);
+        post_vals  += 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5;
+        boost::assign::push_back(post_d_vals)
+            ("able", 0)("baker", 0)("able", 0)("baker", 0)("charlie", 0)
+            ("dog", 0)("easy", 0)("fox", 5)("charlie", 0)("dog", 0)("easy", 0);
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 5)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 5)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+            (boost::tree_node::post_order_traversal, 5);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0)
+            (boost::tree_node::post_order_traversal, "able", 0)
+            (boost::tree_node::pre_order_traversal, "baker", 0)
+            (boost::tree_node::post_order_traversal, "baker", 0)
+            (boost::tree_node::pre_order_traversal, "charlie", 0)
+                (boost::tree_node::pre_order_traversal, "fox", 5)
+                    (boost::tree_node::pre_order_traversal, "able", 0)
+                    (boost::tree_node::post_order_traversal, "able", 0)
+                    (boost::tree_node::pre_order_traversal, "baker", 0)
+                    (boost::tree_node::post_order_traversal, "baker", 0)
+                    (boost::tree_node::pre_order_traversal, "charlie", 0)
+                    (boost::tree_node::post_order_traversal, "charlie", 0)
+                    (boost::tree_node::pre_order_traversal, "dog", 0)
+                    (boost::tree_node::post_order_traversal, "dog", 0)
+                    (boost::tree_node::pre_order_traversal, "easy", 0)
+                    (boost::tree_node::post_order_traversal, "easy", 0)
+                (boost::tree_node::post_order_traversal, "fox", 5)
+            (boost::tree_node::post_order_traversal, "charlie", 0)
+            (boost::tree_node::pre_order_traversal, "dog", 0)
+            (boost::tree_node::post_order_traversal, "dog", 0)
+            (boost::tree_node::pre_order_traversal, "easy", 0)
+            (boost::tree_node::post_order_traversal, "easy", 0);
+        test_associative_node(
+            d_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+          , boost::mpl::false_()
+        );
+
+        boost::tree_node::dereference_iterator(d_child_itr) = d_root;
+        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();
+        bf_vals    += 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0;
+        boost::assign::push_back(bf_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("dog", 0)("easy", 0)
+            ("fox", 5)("able", 0)("baker", 0)("charlie", 0)("dog", 0)
+            ("easy", 0)("fox", 5)("able", 0)("baker", 0)("charlie", 0)
+            ("dog", 0)("easy", 0);
+        pre_vals   += 5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0;
+        boost::assign::push_back(pre_d_vals)
+            ("able", 0)("baker", 0)("charlie", 0)("fox", 5)("able", 0)
+            ("baker", 0)("charlie", 0)("fox", 5)("able", 0)("baker", 0)
+            ("charlie", 0)("dog", 0)("easy", 0)("dog", 0)("easy", 0)("dog", 0)
+            ("easy", 0);
+        post_vals  += 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5;
+        boost::assign::push_back(post_d_vals)
+            ("able", 0)("baker", 0)("able", 0)("baker", 0)("able", 0)
+            ("baker", 0)("charlie", 0)("dog", 0)("easy", 0)("fox", 5)
+            ("charlie", 0)("dog", 0)("easy", 0)("fox", 5)("charlie", 0)
+            ("dog", 0)("easy", 0);
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 5)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 5)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 5)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 5)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+            (boost::tree_node::post_order_traversal, 5);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", 0)
+            (boost::tree_node::post_order_traversal, "able", 0)
+            (boost::tree_node::pre_order_traversal, "baker", 0)
+            (boost::tree_node::post_order_traversal, "baker", 0)
+            (boost::tree_node::pre_order_traversal, "charlie", 0)
+                (boost::tree_node::pre_order_traversal, "fox", 5)
+                    (boost::tree_node::pre_order_traversal, "able", 0)
+                    (boost::tree_node::post_order_traversal, "able", 0)
+                    (boost::tree_node::pre_order_traversal, "baker", 0)
+                    (boost::tree_node::post_order_traversal, "baker", 0)
+                    (boost::tree_node::pre_order_traversal, "charlie", 0)
+                        (boost::tree_node::pre_order_traversal, "fox", 5)
+                            (boost::tree_node::pre_order_traversal, "able", 0)
+                            (boost::tree_node::post_order_traversal, "able", 0)
+                            (boost::tree_node::pre_order_traversal, "baker", 0)
+                            (boost::tree_node::post_order_traversal, "baker", 0)
+                            (boost::tree_node::pre_order_traversal, "charlie", 0)
+                            (boost::tree_node::post_order_traversal, "charlie", 0)
+                            (boost::tree_node::pre_order_traversal, "dog", 0)
+                            (boost::tree_node::post_order_traversal, "dog", 0)
+                            (boost::tree_node::pre_order_traversal, "easy", 0)
+                            (boost::tree_node::post_order_traversal, "easy", 0)
+                        (boost::tree_node::post_order_traversal, "fox", 5)
+                    (boost::tree_node::post_order_traversal, "charlie", 0)
+                    (boost::tree_node::pre_order_traversal, "dog", 0)
+                    (boost::tree_node::post_order_traversal, "dog", 0)
+                    (boost::tree_node::pre_order_traversal, "easy", 0)
+                    (boost::tree_node::post_order_traversal, "easy", 0)
+                (boost::tree_node::post_order_traversal, "fox", 5)
+            (boost::tree_node::post_order_traversal, "charlie", 0)
+            (boost::tree_node::pre_order_traversal, "dog", 0)
+            (boost::tree_node::post_order_traversal, "dog", 0)
+            (boost::tree_node::pre_order_traversal, "easy", 0)
+            (boost::tree_node::post_order_traversal, "easy", 0);
+        test_associative_node(
+            d_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    {
+        DNode d_copy(d_root);
+        boost::tree_node::breadth_first_iterator<DNode const>
+            bf_root_itr(d_root), bf_copy_itr(d_copy);
+        boost::tree_node::breadth_first_descendant_iterator<DNode const>
+            bf_d_root_itr(d_root), bf_d_copy_itr(d_copy);
+        boost::tree_node::pre_order_iterator<DNode const>
+            pre_root_itr(d_root), pre_copy_itr(d_copy);
+        boost::tree_node::pre_order_descendant_iterator<DNode const>
+            pre_d_root_itr(d_root), pre_d_copy_itr(d_copy);
+        boost::tree_node::post_order_iterator<DNode const>
+            post_root_itr(d_root), post_copy_itr(d_copy);
+        boost::tree_node::post_order_descendant_iterator<DNode const>
+            post_d_root_itr(d_root), post_d_copy_itr(d_copy);
+        boost::tree_node::depth_first_iterator<DNode const>
+            df_root_itr(d_root), df_copy_itr(d_copy);
+        boost::tree_node::depth_first_descendant_iterator<DNode const>
+            df_d_root_itr(d_root), df_d_copy_itr(d_copy);
+
+        test_node_copies(bf_root_itr, bf_copy_itr);
+        test_associative_node_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_copies(pre_root_itr, pre_copy_itr);
+        test_associative_node_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_copies(post_root_itr, post_copy_itr);
+        test_associative_node_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_copies(df_root_itr, df_copy_itr);
+        test_associative_node_copies(df_d_root_itr, df_d_copy_itr);
+    }
+
+    d_root = boost::tree_node::dereference_iterator(d_root.find(names[4]));
+
+    {
+        Sizes bf_vals, pre_vals, post_vals;
+        KeySizes bf_d_vals, pre_d_vals, post_d_vals;
+        DFSizes df_vals;
+        DFKeySizes df_d_vals;
+
+        bf_vals    += 0;
+        pre_vals   += 0;
+        post_vals  += 0;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 0)
+            (boost::tree_node::post_order_traversal, 0);
+        test_associative_node(
+            d_root
+          , bf_vals
+          , bf_d_vals
+          , pre_vals
+          , pre_d_vals
+          , post_vals
+          , post_d_vals
+          , df_vals
+          , df_d_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    a_root.get_data() = "5";
+
+    for (
+        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            char numchar = digit;
+
+            while (numchar != '0')
+            {
+                --numchar;
+
+                for (char j = 0; numchar + j < digit; ++j)
+                {
+                    typename ANode::iterator child_itr(itr->emplace(names[j]));
+                    typename ANode::traits::iterator_range c_range(
+                        itr->equal_range(names[j])
+                    );
+                    ANode& child(
+                        boost::tree_node::dereference_iterator(child_itr)
+                    );
+                    TestString& data = child.get_data();
+
+                    BOOST_CHECK(
+                        data.empty()
+//                      , "Data member not default-constructed."
+                    );
+                    data += numchar;
+                    BOOST_CHECK(
+                        (child.get_parent_ptr() == &*itr)
+//                      , "Ctor not linking child to parent."
+                    );
+                    BOOST_CHECK(
+                        (child.get_position() == child_itr)
+//                      , "Position iterator incorrect."
+                    );
+                    BOOST_CHECK(
+                        (
+                            boost::range::find_if(
+                                c_range
+                              , example_match_predicate<ANode,MSelector>(
+                                    child_itr
+                                )
+                            )
+                         != boost::end(c_range)
+                        )
+//                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        Strings bf_vals, pre_vals, post_vals;
+        KeyStrings bf_d_vals, pre_d_vals, post_d_vals;
+        DFStrings df_vals;
+        DFKeyStrings df_d_vals;
+        Emplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 68)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 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)
+            ("2", 1, 4)("1", 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)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[bf_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "3", 2, 10)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "2", 1, 4)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 68)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[pre_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "1", 0, 1)("dog", "0", 0, 1)
+            ("easy", "0", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("4", 3, 26)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("5", 4, 68);
+        emplacer[post_d_vals]
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "4", 3, 26)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 4)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "1", 0, 1)("dog", "0", 0, 1)
+            ("easy", "0", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 68)
+                (boost::tree_node::pre_order_traversal, "4", 3, 26)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                    (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "2", 1, 4)
+                    (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::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, "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::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::pre_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "5", 4, 68);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 26)
+            (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "2", 1, 4)
+                (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", "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::post_order_traversal, "charlie", "2", 1, 4)
+            (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "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, "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);
+        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::mpl::true_()
+        );
+    }
+
+    {
+        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);
+
+        test_node_with_depth_copies(bf_root_itr, bf_copy_itr);
+        test_assoc_node_with_depth_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_with_depth_copies(pre_root_itr, pre_copy_itr);
+        test_assoc_node_with_depth_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_with_depth_copies(post_root_itr, post_copy_itr);
+        test_assoc_node_with_depth_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_with_depth_copies(df_root_itr, df_copy_itr);
+        test_assoc_node_with_depth_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])
+            ).emplace(names[5])
+        );
+        ANode& a_child(boost::tree_node::dereference_iterator(a_child_itr));
+
+        BOOST_CHECK(
+            (a_child.get_position() == a_child_itr)
+//          , "Position iterator incorrect."
+        );
+        a_child.get_data().push_back('7');
+
+        Strings bf_vals, pre_vals, post_vals;
+        KeyStrings bf_d_vals, pre_d_vals, post_d_vals;
+        DFStrings df_vals;
+        DFKeyStrings df_d_vals;
+        Emplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 69)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 5)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 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)
+            ("7", 0, 1)("2", 1, 4)("1", 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)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[bf_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "3", 2, 10)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "2", 1, 5)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 69)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 5)("1", 0, 1)("0", 0, 1)("0", 0, 1)("7", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[pre_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 5)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "7", 0, 1)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("4", 3, 26)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("2", 1, 5)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("5", 4, 69);
+        emplacer[post_d_vals]
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "4", 3, 26)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("charlie", "2", 1, 5)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 69)
+                (boost::tree_node::pre_order_traversal, "4", 3, 26)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "2", 1, 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, "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, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "2", 1, 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, "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::pre_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "5", 4, 69);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 26)
+            (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "2", 1, 5)
+                (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", "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, "fox", "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", "7", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "2", 1, 5)
+            (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "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, "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);
+        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::mpl::true_()
+        );
+
+        a_child = a_root;
+        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", 6, 137)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("2", 5, 73)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 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)("5", 4, 69)("2", 1, 4)("1", 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)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("4", 3, 26)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 5)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 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)("7", 0, 1)("2", 1, 4)
+            ("1", 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)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1);
+        emplacer[bf_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "3", 2, 10)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "2", 5, 73)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "5", 4, 69)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "4", 3, 26)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "3", 2, 10)("baker", "2", 1, 4)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "2", 1, 5)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("fox", "7", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 6, 137)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 5, 73)("1", 0, 1)("0", 0, 1)("0", 0, 1)("5", 4, 69)
+            ("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 5)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("7", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1);
+        emplacer[pre_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 5, 73)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "5", 4, 69)
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 5)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "7", 0, 1)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "1", 0, 1)("dog", "0", 0, 1)
+            ("easy", "0", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("4", 3, 26)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("4", 3, 26)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("3", 2, 10)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("7", 0, 1)("2", 1, 5)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("5", 4, 69)("2", 5, 73)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("5", 6, 137);
+        emplacer[post_d_vals]
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "4", 3, 26)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "3", 2, 10)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "2", 1, 4)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "4", 3, 26)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "3", 2, 10)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "2", 1, 4)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "7", 0, 1)
+            ("charlie", "2", 1, 5)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("fox", "5", 4, 69)("charlie", "2", 5, 73)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "1", 0, 1)("dog", "0", 0, 1)
+            ("easy", "0", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 6, 137)
+                (boost::tree_node::pre_order_traversal, "4", 3, 26)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "2", 5, 73)
+                    (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::pre_order_traversal, "0", 0, 1)
+                    (boost::tree_node::post_order_traversal, "0", 0, 1)
+                    (boost::tree_node::pre_order_traversal, "5", 4, 69)
+                        (boost::tree_node::pre_order_traversal, "4", 3, 26)
+                        (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "3", 2, 10)
+                            (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                            (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::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, "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::pre_order_traversal, "3", 2, 10)
+                            (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                            (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::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, "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::pre_order_traversal, "2", 1, 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, "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, "7", 0, 1)
+                            (boost::tree_node::post_order_traversal, "7", 0, 1)
+                        (boost::tree_node::post_order_traversal, "2", 1, 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, "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::pre_order_traversal, "0", 0, 1)
+                        (boost::tree_node::post_order_traversal, "0", 0, 1)
+                    (boost::tree_node::post_order_traversal, "5", 4, 69)
+                (boost::tree_node::post_order_traversal, "2", 5, 73)
+                (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::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::pre_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "5", 6, 137);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 26)
+            (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "2", 5, 73)
+                (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", "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, "fox", "5", 4, 69)
+                (boost::tree_node::pre_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "2", 1, 5)
+                (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", "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, "fox", "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "2", 1, 5)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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, "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", 4, 69)
+            (boost::tree_node::post_order_traversal, "charlie", "2", 5, 73)
+            (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "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, "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);
+        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::mpl::true_()
+        );
+
+        a_root = a_child;
+        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", 4, 69)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 5)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 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)
+            ("7", 0, 1)("2", 1, 4)("1", 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)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[bf_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "3", 2, 10)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "2", 1, 5)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 69)("4", 3, 26)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 5)("1", 0, 1)("0", 0, 1)("0", 0, 1)("7", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[pre_d_vals]
+            ("able", "4", 3, 26)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 5)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "7", 0, 1)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("4", 3, 26)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("2", 1, 5)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("5", 4, 69);
+        emplacer[post_d_vals]
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "4", 3, 26)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("charlie", "2", 1, 5)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 69)
+                (boost::tree_node::pre_order_traversal, "4", 3, 26)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "2", 1, 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, "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, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "2", 1, 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, "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::pre_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "5", 4, 69);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", "4", 3, 26)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 26)
+            (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "2", 1, 5)
+                (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", "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, "fox", "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", "7", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "2", 1, 5)
+            (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "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, "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);
+        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::mpl::true_()
+        );
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::dereference_iterator(a_root.begin()).erase(
+            names[1]
+        ) == 3
+    );
+
+    {
+        Strings bf_vals, pre_vals, post_vals;
+        KeyStrings bf_d_vals, pre_d_vals, post_d_vals;
+        DFStrings df_vals;
+        DFKeyStrings df_d_vals;
+        Emplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 63)("4", 3, 20)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)("2", 1, 5)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 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)("7", 0, 1)("2", 1, 4)("1", 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)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[bf_d_vals]
+            ("able", "4", 3, 20)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "3", 2, 10)
+            ("baker", "2", 1, 4)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "2", 1, 5)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "1", 0, 1)("dog", "0", 0, 1)("easy", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 63)("4", 3, 20)("3", 2, 10)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 10)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)
+            ("2", 1, 4)("1", 0, 1)("0", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 5)("1", 0, 1)("0", 0, 1)("0", 0, 1)("7", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1);
+        emplacer[pre_d_vals]
+            ("able", "4", 3, 20)("able", "3", 2, 10)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("charlie", "1", 0, 1)
+            ("charlie", "0", 0, 1)("dog", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "1", 0, 1)("baker", "0", 0, 1)
+            ("charlie", "0", 0, 1)("baker", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "2", 1, 5)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("fox", "7", 0, 1)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("4", 3, 20)("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("0", 0, 1)("3", 2, 10)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("2", 1, 5)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("0", 0, 1)("5", 4, 63);
+        emplacer[post_d_vals]
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("able", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("able", "2", 1, 4)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("charlie", "1", 0, 1)("charlie", "0", 0, 1)
+            ("dog", "0", 0, 1)("able", "4", 3, 20)("able", "1", 0, 1)
+            ("able", "0", 0, 1)("baker", "0", 0, 1)("able", "2", 1, 4)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("charlie", "0", 0, 1)("able", "3", 2, 10)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("able", "1", 0, 1)("able", "0", 0, 1)("baker", "0", 0, 1)
+            ("able", "2", 1, 4)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "1", 0, 1)("baker", "0", 0, 1)("charlie", "0", 0, 1)
+            ("baker", "3", 2, 10)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("baker", "2", 1, 4)("baker", "1", 0, 1)
+            ("baker", "0", 0, 1)("able", "1", 0, 1)("able", "0", 0, 1)
+            ("baker", "0", 0, 1)("fox", "7", 0, 1)("charlie", "2", 1, 5)
+            ("charlie", "1", 0, 1)("charlie", "0", 0, 1)("dog", "1", 0, 1)
+            ("dog", "0", 0, 1)("easy", "0", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 63)
+                (boost::tree_node::pre_order_traversal, "4", 3, 20)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                            (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::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, "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::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::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, "2", 1, 4)
+                        (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::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, "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::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::pre_order_traversal, "0", 0, 1)
+                    (boost::tree_node::post_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "4", 3, 20)
+                (boost::tree_node::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "3", 2, 10)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                        (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::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, "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::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::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, "2", 1, 4)
+                    (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::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, "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::pre_order_traversal, "2", 1, 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, "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, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "2", 1, 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, "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::pre_order_traversal, "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "5", 4, 63);
+        emplacer[df_d_vals]
+            (boost::tree_node::pre_order_traversal, "able", "4", 3, 20)
+                (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "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::post_order_traversal, "able", "4", 3, 20)
+            (boost::tree_node::pre_order_traversal, "able", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "able", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "baker", "3", 2, 10)
+                (boost::tree_node::pre_order_traversal, "able", "2", 1, 4)
+                (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", "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::post_order_traversal, "able", "2", 1, 4)
+                (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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "able", "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", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+                (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+                (boost::tree_node::post_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "3", 2, 10)
+            (boost::tree_node::pre_order_traversal, "baker", "2", 1, 4)
+                (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", "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::post_order_traversal, "baker", "2", 1, 4)
+            (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", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "baker", "0", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "2", 1, 5)
+                (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", "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, "fox", "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "fox", "7", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "2", 1, 5)
+            (boost::tree_node::pre_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "1", 0, 1)
+            (boost::tree_node::pre_order_traversal, "charlie", "0", 0, 1)
+            (boost::tree_node::post_order_traversal, "charlie", "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, "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);
+        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::mpl::true_()
+        );
+    }
+}
+
+#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<
+        boost::ptr_map_selector<boost::c_str_ordering_selector>
+      , boost::ptr_multimap_selector<boost::c_str_ordering_selector>
+    >();
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+    test<
+        boost::map_selector<boost::mpl::true_,boost::c_str_ordering_selector>
+      , boost::multimap_selector<
+            boost::mpl::true_
+          , boost::c_str_ordering_selector
+        >
+    >();
+    test<
+        boost::flat_map_selector<boost::c_str_ordering_selector>
+      , 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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,983 @@
+// 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 <utility>
+#include <boost/tuple/tuple.hpp>
+#include <boost/assign/std/deque.hpp>
+#include <boost/assign/list_inserter.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/binary_node.hpp>
+#include <boost/tree_node/with_count.hpp>
+#include <boost/tree_node/with_height.hpp>
+#include <boost/tree_node/with_position.hpp>
+#include "../example/default_unconstruct_type.hpp"
+#include "iterator_functions.hpp"
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/std/string.hpp>
+#else
+#include <string>
+#endif
+typedef std::string
+        TestString;
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/boost/container/string.hpp>
+#else
+#include <boost/container/string.hpp>
+#endif
+typedef boost::container::string
+        TestString;
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+typedef boost::tree_node::binary_node<default_unconstructible_example_type>
+        DNode;
+typedef boost::tree_node::with_height<
+            boost::tree_node::with_count_gen<
+                boost::tree_node::with_position_gen<
+                    boost::tree_node::binary_node_gen
+                >
+            >
+          , TestString
+        >
+        ANode;
+typedef std::deque<std::size_t>
+        SizeValues;
+typedef std::deque<std::pair<boost::tree_node::traversal_state,std::size_t> >
+        DFSizeValues;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<TestString,std::size_t,std::size_t>
+        >::type
+        StringValues;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , TestString
+              , std::size_t
+              , std::size_t
+            >
+        >::type
+        DFStringValues;
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        DFEmplacer;
+
+int test_main(int argc, char** argv)
+{
+    using namespace boost::assign;
+
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_CHECK(
+        !d_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+    BOOST_CHECK(
+        a_root.get_data().empty()
+//      , "Data member not default-constructed."
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<DNode> itr(d_root);
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            DNode::iterator child_itr(itr->emplace_left(count - 2));
+            DNode::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?"
+            );
+
+            child_itr = itr->emplace_right(count - 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?"
+            );
+        }
+    }
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals, in_vals;
+        DFSizeValues df_vals;
+
+        bf_vals   += 5, 3, 4, 1, 2, 2, 3, 0, 1, 0, 1, 1, 2, 0, 1;
+        pre_vals  += 5, 3, 1, 2, 0, 1, 4, 2, 0, 1, 3, 1, 2, 0, 1;
+        post_vals += 1, 0, 1, 2, 3, 0, 1, 2, 1, 0, 1, 2, 3, 4, 5;
+        in_vals   += 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0, 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    {
+        DNode d_copy(d_root);
+        boost::tree_node::breadth_first_iterator<DNode const>
+            bf_root_itr(d_root), bf_copy_itr(d_copy);
+        boost::tree_node::breadth_first_descendant_iterator<DNode const>
+            bf_d_root_itr(d_root), bf_d_copy_itr(d_copy);
+        boost::tree_node::pre_order_iterator<DNode const>
+            pre_root_itr(d_root), pre_copy_itr(d_copy);
+        boost::tree_node::pre_order_descendant_iterator<DNode const>
+            pre_d_root_itr(d_root), pre_d_copy_itr(d_copy);
+        boost::tree_node::post_order_iterator<DNode const>
+            post_root_itr(d_root), post_copy_itr(d_copy);
+        boost::tree_node::post_order_descendant_iterator<DNode const>
+            post_d_root_itr(d_root), post_d_copy_itr(d_copy);
+        boost::tree_node::in_order_iterator<DNode const>
+            in_root_itr(d_root), in_copy_itr(d_copy);
+        boost::tree_node::depth_first_iterator<DNode const>
+            df_root_itr(d_root), df_copy_itr(d_copy);
+        boost::tree_node::depth_first_descendant_iterator<DNode const>
+            df_d_root_itr(d_root), df_d_copy_itr(d_copy);
+
+        test_node_copies(bf_root_itr, bf_copy_itr);
+        test_node_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_copies(pre_root_itr, pre_copy_itr);
+        test_node_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_copies(post_root_itr, post_copy_itr);
+        test_node_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_copies(in_root_itr, in_copy_itr);
+        test_node_copies(df_root_itr, df_copy_itr);
+        test_node_copies(df_d_root_itr, df_d_copy_itr);
+    }
+
+    {
+        DNode::pointer p = d_root.get_left_child_ptr()->get_left_child_ptr();
+        DNode::iterator p_child_itr = p->insert_left(d_root);
+        SizeValues bf_vals, pre_vals, post_vals, in_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 3, 4, 1, 2, 2, 3, 5, 0, 1, 0, 1, 1, 2, 3, 4, 0, 1, 1
+                    , 2, 2, 3, 0, 1, 0, 1, 1, 2, 0, 1;
+        pre_vals   += 5, 3, 1, 5, 3, 1, 2, 0, 1, 4, 2, 0, 1, 3, 1, 2, 0, 1, 2
+                    , 0, 1, 4, 2, 0, 1, 3, 1, 2, 0, 1;
+        post_vals  += 1, 0, 1, 2, 3, 0, 1, 2, 1, 0, 1, 2, 3, 4, 5, 1, 0, 1, 2
+                    , 3, 0, 1, 2, 1, 0, 1, 2, 3, 4, 5;
+        in_vals    += 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0, 2, 1, 1, 3, 0, 2
+                    , 1, 5, 0, 2, 1, 4, 1, 3, 0, 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 5)
+                            (boost::tree_node::pre_order_traversal, 3)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                                (boost::tree_node::pre_order_traversal, 2)
+                                    (boost::tree_node::pre_order_traversal, 0)
+                                    (boost::tree_node::post_order_traversal, 0)
+                                    (boost::tree_node::pre_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 2)
+                            (boost::tree_node::post_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 4)
+                                (boost::tree_node::pre_order_traversal, 2)
+                                    (boost::tree_node::pre_order_traversal, 0)
+                                    (boost::tree_node::post_order_traversal, 0)
+                                    (boost::tree_node::pre_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 3)
+                                    (boost::tree_node::pre_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 1)
+                                    (boost::tree_node::pre_order_traversal, 2)
+                                    (boost::tree_node::pre_order_traversal, 0)
+                                    (boost::tree_node::post_order_traversal, 0)
+                                    (boost::tree_node::pre_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 2)
+                                (boost::tree_node::post_order_traversal, 3)
+                            (boost::tree_node::post_order_traversal, 4)
+                        (boost::tree_node::post_order_traversal, 5)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+
+        d_root = *p_child_itr;
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        in_vals.clear();
+        df_vals.clear();
+        bf_vals   += 5, 3, 4, 1, 2, 2, 3, 0, 1, 0, 1, 1, 2, 0, 1;
+        pre_vals  += 5, 3, 1, 2, 0, 1, 4, 2, 0, 1, 3, 1, 2, 0, 1;
+        post_vals += 1, 0, 1, 2, 3, 0, 1, 2, 1, 0, 1, 2, 3, 4, 5;
+        in_vals   += 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0, 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    *(d_root.get_right_child_ptr()) = d_root;
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals, in_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 3, 5, 1, 2, 3, 4, 0, 1, 1, 2, 2, 3, 0, 1, 0, 1, 1, 2
+                    , 0, 1;
+        pre_vals   += 5, 3, 1, 2, 0, 1, 5, 3, 1, 2, 0, 1, 4, 2, 0, 1, 3, 1, 2
+                    , 0, 1;
+        post_vals  += 1, 0, 1, 2, 3, 1, 0, 1, 2, 3, 0, 1, 2, 1, 0, 1, 2, 3, 4
+                    , 5, 5;
+        in_vals    += 1, 3, 0, 2, 1, 5, 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0
+                    , 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 5)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 4)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::post_order_traversal, 4)
+                (boost::tree_node::post_order_traversal, 5)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    d_root.get_right_child_ptr()->rotate_left();
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals, in_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 3, 4, 1, 2, 5, 3, 0, 1, 3, 2, 1, 2, 1, 2, 0, 1, 0, 1
+                    , 0, 1;
+        pre_vals   += 5, 3, 1, 2, 0, 1, 4, 5, 3, 1, 2, 0, 1, 2, 0, 1, 3, 1, 2
+                    , 0, 1;
+        post_vals  += 1, 0, 1, 2, 3, 1, 0, 1, 2, 3, 0, 1, 2, 5, 1, 0, 1, 2, 3
+                    , 4, 5;
+        in_vals    += 1, 3, 0, 2, 1, 5, 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0
+                    , 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 5)
+                        (boost::tree_node::pre_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::post_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 5)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    d_root.get_right_child_ptr()->rotate_right();
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals, in_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 3, 5, 1, 2, 3, 4, 0, 1, 1, 2, 2, 3, 0, 1, 0, 1, 1, 2
+                    , 0, 1;
+        pre_vals   += 5, 3, 1, 2, 0, 1, 5, 3, 1, 2, 0, 1, 4, 2, 0, 1, 3, 1, 2
+                    , 0, 1;
+        post_vals  += 1, 0, 1, 2, 3, 1, 0, 1, 2, 3, 0, 1, 2, 1, 0, 1, 2, 3, 4
+                    , 5, 5;
+        in_vals    += 1, 3, 0, 2, 1, 5, 1, 3, 0, 2, 1, 5, 0, 2, 1, 4, 1, 3, 0
+                    , 2, 1;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 5)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 4)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::post_order_traversal, 4)
+                (boost::tree_node::post_order_traversal, 5)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    a_root.get_data() = "5";
+
+    for (
+        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            {
+                ANode::iterator child_itr(itr->emplace_left());
+                TestString& data = child_itr->get_data();
+
+                BOOST_CHECK(
+                    data.empty()
+//                  , "Data member not default-constructed."
+                );
+                data += digit - 1;
+                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_position() == child_itr)
+//                  , "Position iterator incorrect."
+                );
+            }
+
+            {
+                ANode::iterator child_itr(itr->emplace_right());
+                TestString& data = child_itr->get_data();
+
+                BOOST_CHECK(
+                    data.empty()
+//                  , "Data member not default-constructed."
+                );
+                data += digit - 2;
+                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_position() == child_itr)
+//                  , "Position iterator incorrect."
+                );
+            }
+        }
+    }
+
+    {
+        StringValues bf_vals, pre_vals, post_vals, in_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 15)("4", 3, 9)("3", 2, 5)("3", 2, 5)("2", 1, 3)("2", 1, 3)
+            ("1", 0, 1)("2", 1, 3)("1", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 15)("4", 3, 9)("3", 2, 5)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 5)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("3", 2, 5)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 3)("4", 3, 9)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("1", 0, 1)("3", 2, 5)("5", 4, 15);
+        emplacer[in_vals]
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("3", 2, 5)("1", 0, 1)("4", 3, 9)
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("5", 4, 15)("1", 0, 1)("2", 1, 3)
+            ("0", 0, 1)("3", 2, 5)("1", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 15)
+                (boost::tree_node::pre_order_traversal, "4", 3, 9)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 5)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                            (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, 3)
+                        (boost::tree_node::pre_order_traversal, "1", 0, 1)
+                        (boost::tree_node::post_order_traversal, "1", 0, 1)
+                    (boost::tree_node::post_order_traversal, "3", 2, 5)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                (boost::tree_node::post_order_traversal, "4", 3, 9)
+                (boost::tree_node::pre_order_traversal, "3", 2, 5)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "1", 0, 1)
+                    (boost::tree_node::post_order_traversal, "1", 0, 1)
+                (boost::tree_node::post_order_traversal, "3", 2, 5)
+            (boost::tree_node::post_order_traversal, "5", 4, 15);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    {
+        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);
+
+        test_node_with_depth_copies(bf_root_itr, bf_copy_itr);
+        test_node_with_depth_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_with_depth_copies(pre_root_itr, pre_copy_itr);
+        test_node_with_depth_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_with_depth_copies(post_root_itr, post_copy_itr);
+        test_node_with_depth_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_with_depth_copies(in_root_itr, in_copy_itr);
+        test_node_with_depth_copies(df_root_itr, df_copy_itr);
+        test_node_with_depth_copies(df_d_root_itr, df_d_copy_itr);
+    }
+
+    {
+        ANode::pointer p(a_root.get_right_child_ptr()->get_right_child_ptr());
+        ANode::iterator p_child_itr(p->emplace_right());
+
+        BOOST_CHECK(
+            (p_child_itr->get_position() == p_child_itr)
+//          , "Position iterator incorrect."
+        );
+        BOOST_CHECK(
+            (p->begin() == p_child_itr)
+//          , "Begin iterator incorrect."
+        );
+        p_child_itr->get_data().push_back('7');
+
+        StringValues bf_vals, pre_vals, post_vals, in_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 16)("4", 3, 9)("3", 2, 6)("3", 2, 5)("2", 1, 3)("2", 1, 3)
+            ("1", 1, 2)("2", 1, 3)("1", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("1", 0, 1)("0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 16)("4", 3, 9)("3", 2, 5)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 1, 2)("7", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("3", 2, 5)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 3)("4", 3, 9)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("7", 0, 1)("1", 1, 2)("3", 2, 6)("5", 4, 16);
+        emplacer[in_vals]
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("3", 2, 5)("1", 0, 1)("4", 3, 9)
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("5", 4, 16)("1", 0, 1)("2", 1, 3)
+            ("0", 0, 1)("3", 2, 6)("1", 1, 2)("7", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 16)
+                (boost::tree_node::pre_order_traversal, "4", 3, 9)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 5)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                            (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, 3)
+                        (boost::tree_node::pre_order_traversal, "1", 0, 1)
+                        (boost::tree_node::post_order_traversal, "1", 0, 1)
+                    (boost::tree_node::post_order_traversal, "3", 2, 5)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                (boost::tree_node::post_order_traversal, "4", 3, 9)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "1", 1, 2)
+                        (boost::tree_node::pre_order_traversal, "7", 0, 1)
+                        (boost::tree_node::post_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "1", 1, 2)
+                (boost::tree_node::post_order_traversal, "3", 2, 6)
+            (boost::tree_node::post_order_traversal, "5", 4, 16);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    a_root.get_left_child_ptr()->rotate_right();
+
+    {
+        StringValues bf_vals, pre_vals, post_vals, in_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 16)("3", 3, 9)("3", 2, 6)("2", 1, 3)("4", 2, 5)("2", 1, 3)
+            ("1", 1, 2)("1", 0, 1)("0", 0, 1)("1", 0, 1)("2", 1, 3)("1", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("1", 0, 1)("0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 16)("3", 3, 9)("2", 1, 3)("1", 0, 1)("0", 0, 1)("4", 2, 5)
+            ("1", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 1, 2)("7", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 3)("4", 2, 5)("3", 3, 9)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("7", 0, 1)("1", 1, 2)("3", 2, 6)("5", 4, 16);
+        emplacer[in_vals]
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("3", 3, 9)("1", 0, 1)("4", 2, 5)
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("5", 4, 16)("1", 0, 1)("2", 1, 3)
+            ("0", 0, 1)("3", 2, 6)("1", 1, 2)("7", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 16)
+                (boost::tree_node::pre_order_traversal, "3", 3, 9)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "4", 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, "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, 3)
+                    (boost::tree_node::post_order_traversal, "4", 2, 5)
+                (boost::tree_node::post_order_traversal, "3", 3, 9)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "1", 1, 2)
+                        (boost::tree_node::pre_order_traversal, "7", 0, 1)
+                        (boost::tree_node::post_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "1", 1, 2)
+                (boost::tree_node::post_order_traversal, "3", 2, 6)
+            (boost::tree_node::post_order_traversal, "5", 4, 16);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    a_root.get_left_child_ptr()->rotate_left();
+
+    {
+        StringValues bf_vals, pre_vals, post_vals, in_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 4, 16)("4", 3, 9)("3", 2, 6)("3", 2, 5)("2", 1, 3)("2", 1, 3)
+            ("1", 1, 2)("2", 1, 3)("1", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1)("7", 0, 1)("1", 0, 1)("0", 0, 1);
+        emplacer[pre_vals]
+            ("5", 4, 16)("4", 3, 9)("3", 2, 5)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 1, 2)("7", 0, 1);
+        emplacer[post_vals]
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("3", 2, 5)("1", 0, 1)
+            ("0", 0, 1)("2", 1, 3)("4", 3, 9)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("7", 0, 1)("1", 1, 2)("3", 2, 6)("5", 4, 16);
+        emplacer[in_vals]
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("3", 2, 5)("1", 0, 1)("4", 3, 9)
+            ("1", 0, 1)("2", 1, 3)("0", 0, 1)("5", 4, 16)("1", 0, 1)("2", 1, 3)
+            ("0", 0, 1)("3", 2, 6)("1", 1, 2)("7", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 16)
+                (boost::tree_node::pre_order_traversal, "4", 3, 9)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 5)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                            (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, 3)
+                        (boost::tree_node::pre_order_traversal, "1", 0, 1)
+                        (boost::tree_node::post_order_traversal, "1", 0, 1)
+                    (boost::tree_node::post_order_traversal, "3", 2, 5)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                (boost::tree_node::post_order_traversal, "4", 3, 9)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "1", 1, 2)
+                        (boost::tree_node::pre_order_traversal, "7", 0, 1)
+                        (boost::tree_node::post_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "1", 1, 2)
+                (boost::tree_node::post_order_traversal, "3", 2, 6)
+            (boost::tree_node::post_order_traversal, "5", 4, 16);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    a_root.begin()->clear();
+
+    {
+        StringValues bf_vals, pre_vals, post_vals, in_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        emplacer[bf_vals]
+            ("5", 3, 8)("4", 0, 1)("3", 2, 6)("2", 1, 3)("1", 1, 2)("1", 0, 1)
+            ("0", 0, 1)("7", 0, 1);
+        emplacer[pre_vals]
+            ("5", 3, 8)("4", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 1, 2)("7", 0, 1);
+        emplacer[post_vals]
+            ("4", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 3)("7", 0, 1)("1", 1, 2)
+            ("3", 2, 6)("5", 3, 8);
+        emplacer[in_vals]
+            ("4", 0, 1)("5", 3, 8)("1", 0, 1)("2", 1, 3)("0", 0, 1)("3", 2, 6)
+            ("1", 1, 2)("7", 0, 1);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 3, 8)
+                (boost::tree_node::pre_order_traversal, "4", 0, 1)
+                (boost::tree_node::post_order_traversal, "4", 0, 1)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (boost::tree_node::pre_order_traversal, "1", 1, 2)
+                        (boost::tree_node::pre_order_traversal, "7", 0, 1)
+                        (boost::tree_node::post_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "1", 1, 2)
+                (boost::tree_node::post_order_traversal, "3", 2, 6)
+            (boost::tree_node::post_order_traversal, "5", 3, 8);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , in_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,546 @@
+// 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/mpl/bool.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 <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
+        );
+    }
+}
+
+template <typename Node>
+void test_children_with_position(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(
+            boost::tree_node::dereference_iterator(itr).get_position() == itr
+        );
+    }
+}
+
+template <typename TreeItr, typename Itr>
+void test_iterators(TreeItr tree_itr, Itr itr, Itr itr_end, boost::mpl::false_)
+{
+    while (tree_itr)
+    {
+        BOOST_CHECK(itr != itr_end);
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_data() == *itr
+        );
+        test_children(boost::tree_node::dereference_iterator(tree_itr));
+
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+}
+
+template <typename TreeItr, typename Itr>
+void test_iterators(TreeItr tree_itr, Itr itr, Itr itr_end, boost::mpl::true_)
+{
+    while (tree_itr)
+    {
+        BOOST_CHECK(itr != itr_end);
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_data()
+         == boost::get<0>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_height()
+         == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_count()
+         == boost::get<2>(*itr)
+        );
+        test_children_with_position(
+            boost::tree_node::dereference_iterator(tree_itr)
+        );
+
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+}
+
+template <typename DFItr, typename PairItr>
+void
+    test_df_iterator(
+        DFItr df_itr
+      , PairItr p_itr
+      , PairItr p_end
+      , boost::mpl::false_
+    )
+{
+    while (df_itr)
+    {
+        BOOST_CHECK(p_itr != p_end);
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == p_itr->first
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_data()
+         == p_itr->second
+        );
+        test_children(boost::tree_node::dereference_iterator(df_itr));
+
+        ++df_itr;
+        ++p_itr;
+    }
+
+    BOOST_CHECK(p_itr == p_end);
+}
+
+template <typename DFItr, typename TupleItr>
+void
+    test_df_iterator(
+        DFItr df_itr
+      , TupleItr t_itr
+      , TupleItr t_end
+      , boost::mpl::true_
+    )
+{
+    while (df_itr)
+    {
+        BOOST_CHECK(t_itr != t_end);
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(df_itr) == boost::get<0>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_data()
+         == boost::get<1>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_height()
+         == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_count()
+         == boost::get<3>(*t_itr)
+        );
+        test_children_with_position(
+            boost::tree_node::dereference_iterator(df_itr)
+        );
+
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+  , typename BooleanIntegralConstant
+>
+void
+    test_node(
+        Node const& node
+      , Values const& bf_vals
+      , Values const& pre_vals
+      , Values const& post_vals
+      , DFValues const& df_vals
+      , BooleanIntegralConstant has_height
+    )
+{
+    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);
+
+    test_iterators(bf_itr, bf_vals.begin(), bf_vals.end(), has_height);
+    test_iterators(bf_d_itr, ++bf_vals.begin(), bf_vals.end(), has_height);
+    test_iterators(pre_itr, pre_vals.begin(), pre_vals.end(), has_height);
+    test_iterators(pre_d_itr, ++pre_vals.begin(), pre_vals.end(), has_height);
+    test_iterators(post_itr, post_vals.begin(), post_vals.end(), has_height);
+    p_d_vals.pop_back();
+    test_iterators(post_d_itr, p_d_vals.begin(), p_d_vals.end(), has_height);
+    test_df_iterator(df_itr, df_vals.begin(), df_vals.end(), has_height);
+    df_d_vals.pop_front();
+    df_d_vals.pop_back();
+    test_df_iterator(df_d_itr, df_d_vals.begin(), df_d_vals.end(), has_height);
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename DFValues
+  , typename BooleanIntegralConstant
+>
+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
+      , BooleanIntegralConstant has_height
+    )
+{
+    boost::tree_node::in_order_iterator<Node const> in_itr(node);
+
+    test_node(node, bf_vals, pre_vals, post_vals, df_vals, has_height);
+    test_iterators(in_itr, in_vals.begin(), in_vals.end(), has_height);
+}
+
+template <typename TreeItr, typename Itr>
+void
+    test_associative_iterators(
+        TreeItr tree_itr
+      , Itr itr
+      , Itr itr_end
+      , boost::mpl::false_
+    )
+{
+    while (tree_itr)
+    {
+        BOOST_CHECK(itr != itr_end);
+        BOOST_CHECK(tree_itr->first == itr->first);
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_data()
+         == itr->second
+        );
+        test_children(boost::tree_node::dereference_iterator(tree_itr));
+
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+}
+
+template <typename TreeItr, typename Itr>
+void
+    test_associative_iterators(
+        TreeItr tree_itr
+      , Itr itr
+      , Itr itr_end
+      , boost::mpl::true_
+    )
+{
+    while (tree_itr)
+    {
+        BOOST_CHECK(itr != itr_end);
+        BOOST_CHECK(tree_itr->first == boost::get<0>(*itr));
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_data()
+         == boost::get<1>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_height()
+         == boost::get<2>(*itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(tree_itr).get_count()
+         == boost::get<3>(*itr)
+        );
+        test_children_with_position(
+            boost::tree_node::dereference_iterator(tree_itr)
+        );
+
+        ++tree_itr;
+        ++itr;
+    }
+
+    BOOST_CHECK(itr == itr_end);
+}
+
+template <typename DFItr, typename TupleItr>
+void
+    test_df_assoc_iterator(
+        DFItr df_itr
+      , TupleItr t_itr
+      , TupleItr t_end
+      , boost::mpl::false_
+    )
+{
+    while (df_itr)
+    {
+        BOOST_CHECK(t_itr != t_end);
+        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::dereference_iterator(df_itr).get_data()
+         == boost::get<2>(*t_itr)
+        );
+        test_children(boost::tree_node::dereference_iterator(df_itr));
+
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+}
+
+template <typename DFItr, typename TupleItr>
+void
+    test_df_assoc_iterator(
+        DFItr df_itr
+      , TupleItr t_itr
+      , TupleItr t_end
+      , boost::mpl::true_
+    )
+{
+    while (df_itr)
+    {
+        BOOST_CHECK(t_itr != t_end);
+        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::dereference_iterator(df_itr).get_data()
+         == boost::get<2>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_height()
+         == boost::get<3>(*t_itr)
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(df_itr).get_count()
+         == boost::get<4>(*t_itr)
+        );
+        test_children_with_position(
+            boost::tree_node::dereference_iterator(df_itr)
+        );
+
+        ++df_itr;
+        ++t_itr;
+    }
+
+    BOOST_CHECK(t_itr == t_end);
+}
+
+template <
+    typename Node
+  , typename Values
+  , typename KeyValues
+  , typename DFValues
+  , typename DFKeyValues
+  , typename BooleanIntegralConstant
+>
+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
+      , BooleanIntegralConstant has_height
+    )
+{
+    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
+    );
+
+    test_iterators(bf_itr, bf_vals.begin(), bf_vals.end(), has_height);
+    test_associative_iterators(
+        bf_d_itr
+      , bf_kvs.begin()
+      , bf_kvs.end()
+      , has_height
+    );
+    test_iterators(pre_itr, pre_vals.begin(), pre_vals.end(), has_height);
+    test_associative_iterators(
+        pre_d_itr
+      , pre_kvs.begin()
+      , pre_kvs.end()
+      , has_height
+    );
+    test_iterators(post_itr, post_vals.begin(), post_vals.end(), has_height);
+    test_associative_iterators(
+        post_d_itr
+      , post_kvs.begin()
+      , post_kvs.end()
+      , has_height
+    );
+//  test_df_iterator(df_itr, df_vals.begin(), df_vals.end(), has_height);
+//  test_df_assoc_iterator(df_d_itr, df_kvs.begin(), df_kvs.end(), has_height);
+}
+
+template <typename Itr1, typename Itr2>
+void test_node_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(itr2)
+         != boost::tree_node::no_traversal
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_data()
+         == boost::tree_node::dereference_iterator(itr2).get_data()
+        );
+
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(itr2)
+     == boost::tree_node::no_traversal
+    );
+}
+
+template <typename Itr1, typename Itr2>
+void test_node_with_depth_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(itr2)
+         != boost::tree_node::no_traversal
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_data()
+         == boost::tree_node::dereference_iterator(itr2).get_data()
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_height()
+         == boost::tree_node::dereference_iterator(itr2).get_height()
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_count()
+         == boost::tree_node::dereference_iterator(itr2).get_count()
+        );
+
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(itr2)
+     == boost::tree_node::no_traversal
+    );
+}
+
+template <typename Itr1, typename Itr2>
+void test_associative_node_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(itr2)
+         != boost::tree_node::no_traversal
+        );
+        BOOST_CHECK(itr1->first == itr2->first);
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_data()
+         == boost::tree_node::dereference_iterator(itr2).get_data()
+        );
+
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(itr2)
+     == boost::tree_node::no_traversal
+    );
+}
+
+template <typename Itr1, typename Itr2>
+void test_assoc_node_with_depth_copies(Itr1 itr1, Itr2 itr2)
+{
+    while (itr1)
+    {
+        BOOST_CHECK(
+            boost::tree_node::traversal_state(itr2)
+         != boost::tree_node::no_traversal
+        );
+        BOOST_CHECK(itr1->first == itr2->first);
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_data()
+         == boost::tree_node::dereference_iterator(itr2).get_data()
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_height()
+         == boost::tree_node::dereference_iterator(itr2).get_height()
+        );
+        BOOST_CHECK(
+            boost::tree_node::dereference_iterator(itr1).get_count()
+         == boost::tree_node::dereference_iterator(itr2).get_count()
+        );
+
+        ++itr1;
+        ++itr2;
+    }
+
+    BOOST_CHECK(
+        boost::tree_node::traversal_state(itr2)
+     == boost::tree_node::no_traversal
+    );
+}
+
+#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-09-08 04:49:44 EDT (Sat, 08 Sep 2012)
@@ -0,0 +1,871 @@
+// 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 <utility>
+#include <boost/tuple/tuple.hpp>
+#include <boost/assign/std/deque.hpp>
+#include <boost/assign/list_inserter.hpp>
+#include <boost/container_gen/selectors_typeof.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/tree_node/nary_node.hpp>
+#include <boost/tree_node/with_count.hpp>
+#include <boost/tree_node/with_height.hpp>
+#include <boost/tree_node/with_position.hpp>
+#include "../example/default_unconstruct_type.hpp"
+#include "iterator_functions.hpp"
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/std/string.hpp>
+#else
+#include <string>
+#endif
+typedef std::string
+        TestString;
+#else  // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if defined BOOST_TYPEOF_EMULATION
+#include <boost/typeof/boost/container/string.hpp>
+#else
+#include <boost/container/string.hpp>
+#endif
+typedef boost::container::string
+        TestString;
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+typedef std::deque<std::size_t>
+        SizeValues;
+typedef std::deque<std::pair<boost::tree_node::traversal_state,std::size_t> >
+        DFSizeValues;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<TestString,std::size_t,std::size_t>
+        >::type
+        StringValues;
+typedef boost::container_gen<
+            boost::dequeS
+          , boost::tuples::tuple<
+                boost::tree_node::traversal_state
+              , TestString
+              , std::size_t
+              , std::size_t
+            >
+        >::type
+        DFStringValues;
+typedef boost::emplace_function_gen<boost::dequeS>::type
+        DFEmplacer;
+
+template <typename Selector>
+void test()
+{
+    using namespace boost::assign;
+
+    typedef boost::tree_node::nary_node<
+                default_unconstructible_example_type
+              , Selector
+            >
+            DNode;
+    typedef boost::tree_node::with_height<
+                boost::tree_node::with_count_gen<
+                    boost::tree_node::with_position_gen<
+                        boost::tree_node::nary_node_gen<Selector>
+                    >
+                >
+              , TestString
+            >
+            ANode;
+
+    DNode d_root(5);
+    ANode a_root;
+
+    BOOST_CHECK(
+        !d_root.get_parent_ptr()
+//      , "Parent member uninitialized."
+    );
+    BOOST_CHECK(
+        a_root.get_data().empty()
+//      , "Data member not default-constructed."
+    );
+
+    for (
+        boost::tree_node::breadth_first_iterator<DNode> itr(d_root);
+        itr;
+        ++itr
+    )
+    {
+        std::size_t const count = itr->get_data().number;
+
+        if (1 < count)
+        {
+            for (std::size_t i = 0; i < count; ++i)
+            {
+                typename DNode::iterator child_itr(itr->emplace(i));
+                typename DNode::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 DNode::iterator c_itr = itr->begin();
+
+                    std::advance(c_itr, i);
+                    BOOST_CHECK(
+                        (&*child_itr == &*c_itr)
+//                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1
+                    , 0, 1, 2, 0, 1;
+        pre_vals   += 5, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 4, 0, 1, 2, 0, 1, 3
+                    , 0, 1, 2, 0, 1;
+        post_vals  += 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 0, 1, 0
+                    , 1, 2, 3, 4, 5;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::pre_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    {
+        DNode d_copy(d_root);
+        boost::tree_node::breadth_first_iterator<DNode const>
+            bf_root_itr(d_root), bf_copy_itr(d_copy);
+        boost::tree_node::breadth_first_descendant_iterator<DNode const>
+            bf_d_root_itr(d_root), bf_d_copy_itr(d_copy);
+        boost::tree_node::pre_order_iterator<DNode const>
+            pre_root_itr(d_root), pre_copy_itr(d_copy);
+        boost::tree_node::pre_order_descendant_iterator<DNode const>
+            pre_d_root_itr(d_root), pre_d_copy_itr(d_copy);
+        boost::tree_node::post_order_iterator<DNode const>
+            post_root_itr(d_root), post_copy_itr(d_copy);
+        boost::tree_node::post_order_descendant_iterator<DNode const>
+            post_d_root_itr(d_root), post_d_copy_itr(d_copy);
+        boost::tree_node::depth_first_iterator<DNode const>
+            df_root_itr(d_root), df_copy_itr(d_copy);
+        boost::tree_node::depth_first_descendant_iterator<DNode const>
+            df_d_root_itr(d_root), df_d_copy_itr(d_copy);
+
+        test_node_copies(bf_root_itr, bf_copy_itr);
+        test_node_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_copies(pre_root_itr, pre_copy_itr);
+        test_node_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_copies(post_root_itr, post_copy_itr);
+        test_node_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_copies(df_root_itr, df_copy_itr);
+        test_node_copies(df_d_root_itr, df_d_copy_itr);
+    }
+
+    {
+        typename DNode::iterator d_ins_itr(d_root.begin());
+        std::advance(d_ins_itr, 2);
+        typename DNode::iterator d_child_itr(d_ins_itr->insert(d_root));
+        SizeValues bf_vals, pre_vals, post_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 0, 1, 2, 3, 4, 0, 1, 5, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2
+                    , 3, 4, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0
+                    , 1, 0, 1, 0, 1, 0, 1, 2, 0, 1;
+        pre_vals   += 5, 0, 1, 2, 0, 1, 5, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 4
+                    , 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 4, 0
+                    , 1, 2, 0, 1, 3, 0, 1, 2, 0, 1;
+        post_vals  += 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 0, 1, 0, 1
+                    , 2, 0, 1, 0, 1, 2, 3, 4, 5, 2, 0, 1, 0, 1, 2, 3, 0, 1, 0
+                    , 1, 2, 0, 1, 0, 1, 2, 3, 4, 5;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::pre_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 5)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::post_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 4)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 3)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                                (boost::tree_node::pre_order_traversal, 2)
+                                    (boost::tree_node::pre_order_traversal, 0)
+                                    (boost::tree_node::post_order_traversal, 0)
+                                    (boost::tree_node::pre_order_traversal, 1)
+                                    (boost::tree_node::post_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 2)
+                            (boost::tree_node::post_order_traversal, 3)
+                        (boost::tree_node::post_order_traversal, 4)
+                    (boost::tree_node::post_order_traversal, 5)
+                (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+
+        d_root = *d_child_itr;
+        bf_vals.clear();
+        pre_vals.clear();
+        post_vals.clear();
+        df_vals.clear();
+        bf_vals    += 5, 0, 1, 2, 3, 4, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1
+                    , 0, 1, 2, 0, 1;
+        pre_vals   += 5, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 4, 0, 1, 2, 0, 1, 3
+                    , 0, 1, 2, 0, 1;
+        post_vals  += 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 0, 1, 0
+                    , 1, 2, 3, 4, 5;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::pre_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 4)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::post_order_traversal, 4)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    {
+        typename DNode::iterator d_itr(d_root.begin());
+
+        std::advance(d_itr, 4);
+        *d_itr = d_root;
+    }
+
+    {
+        SizeValues bf_vals, pre_vals, post_vals;
+        DFSizeValues df_vals;
+
+        bf_vals    += 5, 0, 1, 2, 3, 5, 0, 1, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1, 0
+                    , 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 0, 1, 0, 1, 2, 0, 1;
+        pre_vals   += 5, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1, 5, 0, 1, 2, 0, 1, 3
+                    , 0, 1, 2, 0, 1, 4, 0, 1, 2, 0, 1, 3, 0, 1, 2, 0, 1;
+        post_vals  += 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 0, 1, 0
+                    , 1, 2, 3, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 3, 4, 5, 5;
+        boost::assign::push_back(df_vals)
+            (boost::tree_node::pre_order_traversal, 5)
+                (boost::tree_node::pre_order_traversal, 0)
+                (boost::tree_node::post_order_traversal, 0)
+                (boost::tree_node::pre_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::pre_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::pre_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                (boost::tree_node::post_order_traversal, 3)
+                (boost::tree_node::pre_order_traversal, 5)
+                    (boost::tree_node::pre_order_traversal, 0)
+                    (boost::tree_node::post_order_traversal, 0)
+                    (boost::tree_node::pre_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::pre_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                    (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::pre_order_traversal, 3)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                    (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::pre_order_traversal, 4)
+                        (boost::tree_node::pre_order_traversal, 0)
+                        (boost::tree_node::post_order_traversal, 0)
+                        (boost::tree_node::pre_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::pre_order_traversal, 2)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                        (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::pre_order_traversal, 3)
+                            (boost::tree_node::pre_order_traversal, 0)
+                            (boost::tree_node::post_order_traversal, 0)
+                            (boost::tree_node::pre_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::pre_order_traversal, 2)
+                                (boost::tree_node::pre_order_traversal, 0)
+                                (boost::tree_node::post_order_traversal, 0)
+                                (boost::tree_node::pre_order_traversal, 1)
+                                (boost::tree_node::post_order_traversal, 1)
+                            (boost::tree_node::post_order_traversal, 2)
+                        (boost::tree_node::post_order_traversal, 3)
+                    (boost::tree_node::post_order_traversal, 4)
+                (boost::tree_node::post_order_traversal, 5)
+            (boost::tree_node::post_order_traversal, 5);
+        test_node(
+            d_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::false_()
+        );
+    }
+
+    a_root.get_data() = "5";
+
+    for (
+        boost::tree_node::breadth_first_iterator<ANode> itr(a_root);
+        itr;
+        ++itr
+    )
+    {
+        char digit = itr->get_data()[0];
+
+        if ('1' < digit)
+        {
+            char numchar = digit;
+
+            while (numchar != '0')
+            {
+                typename ANode::iterator child_itr(itr->emplace());
+                TestString& data = child_itr->get_data();
+
+                BOOST_CHECK(
+                    data.empty()
+//                  , "Data member not default-constructed."
+                );
+                BOOST_CHECK(
+                    (child_itr->get_parent_ptr() == &*itr)
+//                  , "Ctor not linking child to parent."
+                );
+                BOOST_CHECK(
+                    (child_itr->get_position() == child_itr)
+//                  , "Position iterator incorrect."
+                );
+                data.push_back(--numchar);
+
+                {
+                    typename ANode::iterator c_itr = itr->begin();
+
+                    std::advance(c_itr, digit - (numchar + 1));
+                    BOOST_CHECK(
+                        (child_itr == c_itr)
+//                      , "Ctor not linking parent to child."
+                    );
+                }
+            }
+        }
+    }
+
+    {
+        StringValues bf_vals, pre_vals, post_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        boost::assign::push_back(bf_vals)
+            ("5", 4, 24)("4", 3, 12)("3", 2, 6)("2", 1, 3)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1);
+        boost::assign::push_back(pre_vals)
+            ("5", 4, 24)("4", 3, 12)("3", 2, 6)("2", 1, 3)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("1", 0, 1)
+            ("0", 0, 1);
+        boost::assign::push_back(post_vals)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("4", 3, 12)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("5", 4, 24);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 24)
+                (boost::tree_node::pre_order_traversal, "4", 3, 12)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                            (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, 3)
+                        (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, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (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, 12)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (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, 6)
+                (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                    (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, 3)
+                (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, 24);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    {
+        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);
+
+        test_node_with_depth_copies(bf_root_itr, bf_copy_itr);
+        test_node_with_depth_copies(bf_d_root_itr, bf_d_copy_itr);
+        test_node_with_depth_copies(pre_root_itr, pre_copy_itr);
+        test_node_with_depth_copies(pre_d_root_itr, pre_d_copy_itr);
+        test_node_with_depth_copies(post_root_itr, post_copy_itr);
+        test_node_with_depth_copies(post_d_root_itr, post_d_copy_itr);
+        test_node_with_depth_copies(df_root_itr, df_copy_itr);
+        test_node_with_depth_copies(df_d_root_itr, df_d_copy_itr);
+    }
+
+    {
+        typename ANode::iterator a_ins_itr(a_root.begin());
+        std::advance(a_ins_itr, 2);
+        typename ANode::iterator a_child_itr(a_ins_itr->emplace());
+
+        BOOST_CHECK(
+            (a_child_itr->get_position() == a_child_itr)
+//          , "Position iterator incorrect."
+        );
+        a_child_itr->get_data().push_back('7');
+
+        StringValues bf_vals, pre_vals, post_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        boost::assign::push_back(bf_vals)
+            ("5", 4, 25)("4", 3, 12)("3", 2, 6)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("7", 0, 1)("2", 1, 3)
+            ("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1);
+        boost::assign::push_back(pre_vals)
+            ("5", 4, 25)("4", 3, 12)("3", 2, 6)("2", 1, 3)("1", 0, 1)
+            ("0", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("7", 0, 1)
+            ("1", 0, 1)("0", 0, 1);
+        boost::assign::push_back(post_vals)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("4", 3, 12)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)("3", 2, 6)
+            ("1", 0, 1)("0", 0, 1)("7", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("5", 4, 25);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 4, 25)
+                (boost::tree_node::pre_order_traversal, "4", 3, 12)
+                    (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                        (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                            (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, 3)
+                        (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, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (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, 12)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (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, 6)
+                (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                    (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::pre_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "2", 1, 4)
+                (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, 25);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+
+    a_root.begin()->clear();
+
+    {
+        StringValues bf_vals, pre_vals, post_vals;
+        DFStringValues df_vals;
+        DFEmplacer emplacer;
+
+        boost::assign::push_back(bf_vals)
+            ("5", 3, 14)("4", 0, 1)("3", 2, 6)("2", 1, 4)("1", 0, 1)("0", 0, 1)
+            ("2", 1, 3)("1", 0, 1)("0", 0, 1)("1", 0, 1)("0", 0, 1)("7", 0, 1)
+            ("1", 0, 1)("0", 0, 1);
+        boost::assign::push_back(pre_vals)
+            ("5", 3, 14)("4", 0, 1)("3", 2, 6)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("1", 0, 1)("0", 0, 1)("2", 1, 4)("1", 0, 1)("0", 0, 1)("7", 0, 1)
+            ("1", 0, 1)("0", 0, 1);
+        boost::assign::push_back(post_vals)
+            ("4", 0, 1)("1", 0, 1)("0", 0, 1)("2", 1, 3)("1", 0, 1)("0", 0, 1)
+            ("3", 2, 6)("1", 0, 1)("0", 0, 1)("7", 0, 1)("2", 1, 4)("1", 0, 1)
+            ("0", 0, 1)("5", 3, 14);
+        emplacer[df_vals]
+            (boost::tree_node::pre_order_traversal, "5", 3, 14)
+                (boost::tree_node::pre_order_traversal, "4", 0, 1)
+                (boost::tree_node::post_order_traversal, "4", 0, 1)
+                (boost::tree_node::pre_order_traversal, "3", 2, 6)
+                    (boost::tree_node::pre_order_traversal, "2", 1, 3)
+                        (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, 3)
+                    (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, 6)
+                (boost::tree_node::pre_order_traversal, "2", 1, 4)
+                    (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::pre_order_traversal, "7", 0, 1)
+                    (boost::tree_node::post_order_traversal, "7", 0, 1)
+                (boost::tree_node::post_order_traversal, "2", 1, 4)
+                (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", 3, 14);
+        test_node(
+            a_root
+          , bf_vals
+          , pre_vals
+          , post_vals
+          , df_vals
+          , boost::mpl::true_()
+        );
+    }
+}
+
+#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>
+#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_> >();
+#endif
+
+    return 0;
+}
+