$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r65768 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/detail boost/filesystem boost/functional/hash boost/fusion boost/gil boost/graph boost/interprocess boost/intrusive boost/io boost/iostreams boost/msm boost/numeric/ublas boost/program_options boost/property_tree boost/python boost/range boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/statechart boost/system boost/thread boost/tr1 boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/algorithm/string libs/array/doc libs/array/test libs/bimap libs/filesystem libs/functional/hash libs/fusion libs/graph/doc libs/graph/example libs/graph/test libs/graph_parallel libs/interprocess libs/intrusive libs/iostreams libs/math/doc/sf_and_dist libs/mpi/build libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/range libs/serialization libs/serialization/test libs/signals libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/inspect tools/regression tools/release tools/wave
From: jewillco_at_[hidden]
Date: 2010-10-05 14:06:12
Author: jewillco
Date: 2010-10-05 14:06:09 EDT (Tue, 05 Oct 2010)
New Revision: 65768
URL: http://svn.boost.org/trac/boost/changeset/65768
Log:
Merged r64065 (fixes to implicit_graph example), r65199 and r65386 (documentation fixes), plus copied test_graphs.cpp from trunk
Properties modified: 
   branches/release/   (props changed)
   branches/release/INSTALL   (props changed)
   branches/release/Jamroot   (props changed)
   branches/release/LICENSE_1_0.txt   (props changed)
   branches/release/boost/   (props changed)
   branches/release/boost-build.jam   (props changed)
   branches/release/boost.css   (props changed)
   branches/release/boost.png   (props changed)
   branches/release/boost/algorithm/string/   (props changed)
   branches/release/boost/archive/   (props changed)
   branches/release/boost/archive/basic_archive.hpp   (props changed)
   branches/release/boost/array.hpp   (props changed)
   branches/release/boost/bimap/   (props changed)
   branches/release/boost/config.hpp   (props changed)
   branches/release/boost/detail/   (props changed)
   branches/release/boost/detail/endian.hpp   (props changed)
   branches/release/boost/filesystem/   (props changed)
   branches/release/boost/filesystem.hpp   (props changed)
   branches/release/boost/functional/hash/   (props changed)
   branches/release/boost/fusion/   (props changed)
   branches/release/boost/gil/   (props changed)
   branches/release/boost/graph/   (props changed)
   branches/release/boost/interprocess/   (props changed)
   branches/release/boost/intrusive/   (props changed)
   branches/release/boost/io/   (props changed)
   branches/release/boost/iostreams/   (props changed)
   branches/release/boost/math_fwd.hpp   (props changed)
   branches/release/boost/msm/   (props changed)
   branches/release/boost/numeric/ublas/   (props changed)
   branches/release/boost/numeric/ublas/functional.hpp   (props changed)
   branches/release/boost/program_options/   (props changed)
   branches/release/boost/property_tree/   (props changed)
   branches/release/boost/python/   (props changed)
   branches/release/boost/range/   (props changed)
   branches/release/boost/serialization/   (props changed)
   branches/release/boost/signals/   (props changed)
   branches/release/boost/signals2/   (props changed)
   branches/release/boost/signals2.hpp   (props changed)
   branches/release/boost/spirit/   (props changed)
   branches/release/boost/spirit/home/   (props changed)
   branches/release/boost/spirit/home/karma/   (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp   (props changed)
   branches/release/boost/statechart/   (props changed)
   branches/release/boost/system/   (props changed)
   branches/release/boost/thread/   (props changed)
   branches/release/boost/thread.hpp   (props changed)
   branches/release/boost/tr1/   (props changed)
   branches/release/boost/unordered/   (props changed)
   branches/release/boost/utility/value_init.hpp   (props changed)
   branches/release/boost/uuid/   (props changed)
   branches/release/boost/variant/   (props changed)
   branches/release/boost/version.hpp   (props changed)
   branches/release/boost/wave/   (props changed)
   branches/release/bootstrap.bat   (props changed)
   branches/release/bootstrap.sh   (props changed)
   branches/release/doc/   (props changed)
   branches/release/index.htm   (props changed)
   branches/release/index.html   (props changed)
   branches/release/libs/   (props changed)
   branches/release/libs/algorithm/string/   (props changed)
   branches/release/libs/array/doc/array.xml   (props changed)
   branches/release/libs/array/test/array0.cpp   (props changed)
   branches/release/libs/array/test/array2.cpp   (props changed)
   branches/release/libs/bimap/   (props changed)
   branches/release/libs/filesystem/   (props changed)
   branches/release/libs/functional/hash/   (props changed)
   branches/release/libs/fusion/   (props changed)
   branches/release/libs/graph_parallel/   (props changed)
   branches/release/libs/interprocess/   (props changed)
   branches/release/libs/intrusive/   (props changed)
   branches/release/libs/iostreams/   (props changed)
   branches/release/libs/libraries.htm   (props changed)
   branches/release/libs/maintainers.txt   (props changed)
   branches/release/libs/math/doc/sf_and_dist/   (props changed)
   branches/release/libs/mpi/build/   (props changed)
   branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/inserter-class.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html   (props changed)
   branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst   (props changed)
   branches/release/libs/msm/   (props changed)
   branches/release/libs/numeric/ublas/   (props changed)
   branches/release/libs/numeric/ublas/doc/   (props changed)
   branches/release/libs/program_options/   (props changed)
   branches/release/libs/property_tree/   (props changed)
   branches/release/libs/python/   (props changed)
   branches/release/libs/range/   (props changed)
   branches/release/libs/serialization/   (props changed)
   branches/release/libs/serialization/test/   (props changed)
   branches/release/libs/serialization/test/A.cpp   (props changed)
   branches/release/libs/serialization/test/A.hpp   (props changed)
   branches/release/libs/serialization/test/A.ipp   (props changed)
   branches/release/libs/serialization/test/B.hpp   (props changed)
   branches/release/libs/serialization/test/C.hpp   (props changed)
   branches/release/libs/serialization/test/D.hpp   (props changed)
   branches/release/libs/serialization/test/J.hpp   (props changed)
   branches/release/libs/serialization/test/Jamfile.v2   (props changed)
   branches/release/libs/serialization/test/base.hpp   (props changed)
   branches/release/libs/serialization/test/binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/binary_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/derived2.hpp   (props changed)
   branches/release/libs/serialization/test/dll_a.cpp   (props changed)
   branches/release/libs/serialization/test/dll_base.cpp   (props changed)
   branches/release/libs/serialization/test/dll_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/portable_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/test_array.cpp   (props changed)
   branches/release/libs/serialization/test/test_binary.cpp   (props changed)
   branches/release/libs/serialization/test/test_bitset.cpp   (props changed)
   branches/release/libs/serialization/test/test_check.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_load.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_save.cpp   (props changed)
   branches/release/libs/serialization/test/test_codecvt_null.cpp   (props changed)
   branches/release/libs/serialization/test/test_complex.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_contained_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_cyclic_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_decl.hpp   (props changed)
   branches/release/libs/serialization/test/test_delete_pointer.cpp   (props changed)
   branches/release/libs/serialization/test/test_deque.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_diamond.cpp   (props changed)
   branches/release/libs/serialization/test/test_diamond_complex.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_plugin.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_simple.cpp   (props changed)
   branches/release/libs/serialization/test/test_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_inclusion.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators_base64.cpp   (props changed)
   branches/release/libs/serialization/test/test_list.cpp   (props changed)
   branches/release/libs/serialization/test/test_list_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_map.cpp   (props changed)
   branches/release/libs/serialization/test/test_mi.cpp   (props changed)
   branches/release/libs/serialization/test/test_mult_archive_types.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_inheritance.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_new_operator.cpp   (props changed)
   branches/release/libs/serialization/test/test_no_rtti.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor2.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_intrusive.cpp   (props changed)
   branches/release/libs/serialization/test/test_not_serializable.cpp   (props changed)
   branches/release/libs/serialization/test/test_null_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_object.cpp   (props changed)
   branches/release/libs/serialization/test/test_optional.cpp   (props changed)
   branches/release/libs/serialization/test/test_pimpl.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.hpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2imp.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.hpp   (props changed)
   branches/release/libs/serialization/test/test_primitive.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_recursion.cpp   (props changed)
   branches/release/libs/serialization/test/test_registered.cpp   (props changed)
   branches/release/libs/serialization/test/test_reset_object_address.cpp   (props changed)
   branches/release/libs/serialization/test/test_set.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_132.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_singleton.cpp   (props changed)
   branches/release/libs/serialization/test/test_smart_cast.cpp   (props changed)
   branches/release/libs/serialization/test/test_split.cpp   (props changed)
   branches/release/libs/serialization/test/test_static_warning.cpp   (props changed)
   branches/release/libs/serialization/test/test_tools.hpp   (props changed)
   branches/release/libs/serialization/test/test_tracking.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_fail.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_unregistered.cpp   (props changed)
   branches/release/libs/serialization/test/test_utf8_codecvt.cpp   (props changed)
   branches/release/libs/serialization/test/test_valarray.cpp   (props changed)
   branches/release/libs/serialization/test/test_variant.cpp   (props changed)
   branches/release/libs/serialization/test/test_vector.cpp   (props changed)
   branches/release/libs/serialization/test/test_void_cast.cpp   (props changed)
   branches/release/libs/serialization/test/text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_warchive.hpp   (props changed)
   branches/release/libs/signals/   (props changed)
   branches/release/libs/spirit/   (props changed)
   branches/release/libs/spirit/classic/example/   (props changed)
   branches/release/libs/spirit/doc/   (props changed)
   branches/release/libs/spirit/example/   (props changed)
   branches/release/libs/spirit/phoenix/   (props changed)
   branches/release/libs/spirit/test/   (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp   (props changed)
   branches/release/libs/statechart/   (props changed)
   branches/release/libs/static_assert/   (props changed)
   branches/release/libs/system/   (props changed)
   branches/release/libs/thread/   (props changed)
   branches/release/libs/timer/   (props changed)
   branches/release/libs/tr1/   (props changed)
   branches/release/libs/unordered/   (props changed)
   branches/release/libs/utility/swap.html   (props changed)
   branches/release/libs/utility/swap/test/std_bitset.cpp   (props changed)
   branches/release/libs/utility/value_init.htm   (props changed)
   branches/release/libs/utility/value_init_test.cpp   (props changed)
   branches/release/libs/uuid/   (props changed)
   branches/release/libs/wave/   (props changed)
   branches/release/more/   (props changed)
   branches/release/more/getting_started/   (props changed)
   branches/release/rst.css   (props changed)
   branches/release/status/   (props changed)
   branches/release/status/Jamfile.v2   (props changed)
   branches/release/tools/   (props changed)
   branches/release/tools/bcp/   (props changed)
   branches/release/tools/boostbook/   (props changed)
   branches/release/tools/build/v2/   (props changed)
   branches/release/tools/inspect/   (props changed)
   branches/release/tools/regression/   (props changed)
   branches/release/tools/release/   (props changed)
   branches/release/tools/wave/   (props changed)
Text files modified: 
   branches/release/libs/graph/doc/bundles.html           |   260 ++++++++++++++++++++-------------       
   branches/release/libs/graph/doc/index.html             |     5                                         
   branches/release/libs/graph/example/implicit_graph.cpp |    37 ++--                                    
   branches/release/libs/graph/test/test_graphs.cpp       |   303 ++++++++++++++++++++++----------------- 
   4 files changed, 342 insertions(+), 263 deletions(-)
Modified: branches/release/libs/graph/doc/bundles.html
==============================================================================
--- branches/release/libs/graph/doc/bundles.html	(original)
+++ branches/release/libs/graph/doc/bundles.html	2010-10-05 14:06:09 EDT (Tue, 05 Oct 2010)
@@ -8,57 +8,59 @@
 
    For more information, see http://www.boost.org
 -->
-  <head>
-    <title>Bundled Properties</title>
-  </head>
-
-  <body BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" 
-        ALINK="#ff0000">
-    <IMG SRC="../../../boost.png" 
-      ALT="C++ Boost" width="277" height="86"/> 
-    <h1>Bundled Properties</h1>
-
-      <p>Class templates <code><a
-      href="adjacency_list.html">adjacency_list</a></code> and 
-	  <code>adjacency_matrix</code> support
-      the introduction of named properties via <a
-      href="using_adjacency_list.html#sec:adjacency-list-properties">internal
-      properties</a>. However, this method is cumbersome in many uses,
-      where it would be more intuitive to just specify a structure or
-      class that contains internal properties for edges or
-      vertices. Bundled properties allow one to use
-      <code>adjacency_list</code> and <code>adjacency_matrix</code> in this 
-	  manner, providing a simple
-      way to introduce and access any number of internal properties
-      for vertices and edges.</p>
-
-      <p>One can introduce bundled properties into an
-      either graph type by providing a user-defined class
-      type for the <code>VertexProperties</code> or
-      <code>EdgeProperties</code> template arguments. The user-defined
-      class may alternatively be placed at the end of a
-      <code>property</code> list, replacing the (implicit)
-      <code>boost::no_property</code> argument.</p>
-
-      <h2>Example: Route planning</h2>
-      <p>Consider the implementation of a simple route planner that
-        should find the shortest directions from one city to another
-        via a set of highways. The vertices of the graph are cities,
-        and we may wish to store several bits of information about the
-        city within each vertex:</p>
-      <pre>
+<head>
+<title>Bundled Properties</title>
+</head>
+
+<body BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
+  ALINK="#ff0000">
+<IMG SRC="../../../boost.png"
+ALT="C++ Boost" width="277" height="86"/>
+<h1>Bundled Properties</h1>
+
+<p>Class templates <code><a
+href="adjacency_list.html">adjacency_list</a></code> and
+<code>adjacency_matrix</code> support
+the introduction of named properties via <a
+href="using_adjacency_list.html#sec:adjacency-list-properties">internal
+properties</a>. However, this method is cumbersome in many uses,
+where it would be more intuitive to just specify a structure or
+class that contains internal properties for edges or
+vertices. Bundled properties allow one to use
+<code>adjacency_list</code> and <code>adjacency_matrix</code> in this
+manner, providing a simple
+way to introduce and access any number of internal properties
+for vertices and edges.</p>
+
+<p>One can introduce bundled properties into an
+either graph type by providing a user-defined class
+type for the <code>VertexProperties</code> or
+<code>EdgeProperties</code> template arguments. The user-defined
+class may alternatively be placed at the end of a
+<code>property</code> list, replacing the (implicit)
+<code>boost::no_property</code> argument.</p>
+
+<h2>Example: Route planning</h2>
+<p>Consider the implementation of a simple route planner that
+  should find the shortest directions from one city to another
+  via a set of highways. The vertices of the graph are cities,
+  and we may wish to store several bits of information about the
+  city within each vertex:</p>
+<pre>
 struct City
 {
   string name;
   int population;
   vector<int> zipcodes;
 };
-      </pre>
-      
-      <p>The edges in the graph represent highways, which also have
-        several interesting attributes:</p>
+</pre>
 
-      <pre>
+<p>
+The edges in the graph represent highways, which also have several interesting
+attributes:
+</p>
+
+<pre>
 struct Highway
 {
   string name;
@@ -67,17 +69,26 @@
   int lanes;
   bool divided;
 };
-      </pre>
+</pre>
+
+<p>With bundled properties, we can directly use the <code>City</code> and
+<code>Highway</code> structures to define the graph:</p>
+<pre>
+typedef boost::adjacency_list<
+    boost::listS, boost::vecS, boost::bidirectionalS,
+    City, Highway>
+  Map;
+</pre>
 
-      <p>Without bundled properties, translating this example directly
-      into an instantiation of <code>adjacency_list</code> would
-      involve several custom properties and would result in a type
-      like this:</p>
-      <pre>
+<p>Without bundled properties, translating this example directly
+into an instantiation of <code>adjacency_list</code> would
+involve several custom properties and would result in a type
+like this:</p>
+<pre>
 typedef boost::adjacency_list<
     boost::listS, boost::vecS, boost::bidirectionalS,
     // Vertex properties
-    boost::property<boost::vertex_name_t, std::string, 
+    boost::property<boost::vertex_name_t, std::string,
     boost::property<population_t, int,
     boost::property<zipcodes_t, std::vector<int> > > >,
     // Edge properties
@@ -87,21 +98,44 @@
     boost::property<edge_lanes_t, int,
     boost::property<edge_divided, bool> > > > > >
   Map;
-      </pre>
+</pre>
+
+<p>
+Bundling vertex and edge properties greatly simplifies the declaration of
+graphs.
+</p>
+<p>
+In addition to vertex and edge bundles, we can also bundle properties of the
+graph itself. Suppopse we extend the application to include a portfolio of
+route-planning maps for different countries. In addition to the <code>City</code>
+and <code>Highway</code> bundles above, we can declare a graph bundle,
+<code>Country</Code>.
+</p>
 
-      <p>With bundled properties, we can directly use the
-        <code>City</code> and <code>Highway</code> structures:</p>
-      <pre>
+<pre>
+struct Country {
+  string name;
+  bool use_right;   // Drive on the left or right
+  bool use_metric;  // mph or km/h
+};
+</pre>
+
+<p>The graph would now be declared as:</p>
+
+<pre>
+<pre>
 typedef boost::adjacency_list<
     boost::listS, boost::vecS, boost::bidirectionalS,
-    City, Highway> Map;
-      </pre>
+    City, Highway, Country>
+  Map;
+</pre>
+</pre>
 
-    <h2>Accessing bundled properties</h2>
-    <p>To access a bundled property for a particular edge or vertex,
-        subscript your graph with the descriptor of the edge or vertex
-        whose bundled property you wish to access. For instance:</p>
-    <pre>
+<h2>Accessing bundled properties</h2>
+<p>To access a bundled property for a particular edge or vertex,
+  subscript your graph with the descriptor of the edge or vertex
+  whose bundled property you wish to access. For instance:</p>
+<pre>
 Map map; // load the map
 Map::vertex_descriptor v = *vertices(map).first;
 map[v].name = "Troy";
@@ -113,66 +147,82 @@
 map[e].speed_limit = 65;
 map[e].lanes = 4;
 map[e].divided = true;
-    </pre>
+</pre>
 
-    <h2>Properties maps from bundled properties</h2>
-    <p>Often one needs to create a property map from an internal
-      property for use in a generic algorithm. For instance, using the
-      graph without bundled properties we might invoke <a
-        href="dijkstra_shortest_paths.html">Dijkstra's shortest
-        paths</a> algorithm like this:</p>
-    <pre>
+<p>
+The graph bundle, since it does not correspond to a vertex or edge descripor
+is accessed using the graph_bundle object as a key.
+</p>
+
+<pre>
+map[graph_bundle].name = "United States";
+map[graph_bundle].use_right = true;
+map[graph_bundle].use_metric = false;
+</pre>
+
+
+<h2>Properties maps from bundled properties</h2>
+<p>Often one needs to create a property map from an internal
+  property for use in a generic algorithm. For instance, using the
+  graph without bundled properties we might invoke <a
+    href="dijkstra_shortest_paths.html">Dijkstra's shortest
+    paths</a> algorithm like this:</p>
+<pre>
 vector<double> distances(num_vertices(map));
 dijkstra_shortest_paths(map, from,
       weight_map(get(edge_length, map))
       .distance_map(make_iterator_property_map(distances.begin(),
                                                get(vertex_index, map))));
-    </pre>
+</pre>
 
-    <p>With bundled properties, we can just pass a <em>member pointer</em>
-	  as the property for <code>get</code>. The equivalent example
-      using bundled properties is:</p>
-    <pre>
+<p>With bundled properties, we can just pass a <em>member pointer</em>
+as the property for <code>get</code>. The equivalent example using bundled
+properties is:</p>
+<pre>
 vector<double> distances(num_vertices(map));
 dijkstra_shortest_paths(map, from,
       weight_map(get(<font color="#ff0000">&Highway::miles</font>, map))
       .distance_map(make_iterator_property_map(distances.begin(),
                                                get(vertex_index, map))));
-    </pre>
+</pre>
 
-    <p>The type of the returned property map is <code>property_map<Map, int Highway::*>::type</code> 
-	or <code>property_map<Map, int Highway::*>::const_type</code>, depending on whether the graph 
-	<code>map</code> is non-constant or constant.
-	
-    <p> You may also access the entire vertex or edge bundle as a property map 
-	using the <code>vertex_bundle</code> or <code>edge_bundle</code> properties,
-	respectively. For instance, the property map returned by <code>get(vertex_bundle, map)</code> is
-	an Lvalue Property Map providing access to the
-	<code>City</code> values stored in each vertex.
-
-    <h2>Getting the type of bundled properties</h2>
-
-    <p>To get the type of the vertex or edge bundle for a given graph
-    type <tt>Graph</tt>, you can use the trait
-    classes <tt>vertex_bundle_type</tt>
-    and <tt>edge_bundle_type</tt>. The
-    type <tt>vertex_bundle_type<Graph>::type</tt> will be the
-    type bundled with vertices (or <tt>no_vertex_bundle</tt> if the
-    graph supports bundles but no vertex bundle
-    exists). Likewise, <tt>edge_bundle_type<Graph>::type</tt>
-    will be the type bundled with edges (or <tt>no_edge_bundle</tt> if
-    no edge bundle exists).</p>
-
-    <h2>Compatibility</h2> <p>Bundled properties will only work
-    properly on compilers that support class template partial
-    specialization.</p>
+<p>The type of the returned property map is <code>property_map<Map, int Highway::*>::type</code>
+or <code>property_map<Map, int Highway::*>::const_type</code>, depending on whether the graph
+<code>map</code> is non-constant or constant.
+
+<p> You may also access the entire vertex or edge bundle as a property map
+using the <code>vertex_bundle</code> or <code>edge_bundle</code> properties,
+respectively. For instance, the property map returned by <code>get(vertex_bundle, map)</code> is
+an Lvalue Property Map providing access to the
+<code>City</code> values stored in each vertex.
+
+<h2>Property maps for a graph bundle</h2>
+There is currently no support for creating property maps from the bundled
+properties of a graph.
+
+<h2>Getting the type of bundled properties</h2>
+
+<p>To get the type of the vertex or edge bundle for a given graph
+type <tt>Graph</tt>, you can use the trait
+classes <tt>vertex_bundle_type</tt>
+and <tt>edge_bundle_type</tt>. The
+type <tt>vertex_bundle_type<Graph>::type</tt> will be the
+type bundled with vertices (or <tt>no_vertex_bundle</tt> if the
+graph supports bundles but no vertex bundle
+exists). Likewise, <tt>edge_bundle_type<Graph>::type</tt>
+will be the type bundled with edges (or <tt>no_edge_bundle</tt> if
+no edge bundle exists).</p>
+
+<h2>Compatibility</h2> <p>Bundled properties will only work
+properly on compilers that support class template partial
+specialization.</p>
 
-    <hr>
+<hr>
 Copyright © 2004 Doug Gregor.
-    <address><a href="mailto:gregod_at_[hidden]"></a></address>
+<address><a href="mailto:gregod_at_[hidden]"></a></address>
 <!-- Created: Fri May  7 09:59:21 EDT 2004 -->
 <!-- hhmts start -->
 Last modified: Fri May  7 10:56:01 EDT 2004
 <!-- hhmts end -->
-  </body>
+</body>
 </html>
Modified: branches/release/libs/graph/doc/index.html
==============================================================================
--- branches/release/libs/graph/doc/index.html	(original)
+++ branches/release/libs/graph/doc/index.html	2010-10-05 14:06:09 EDT (Tue, 05 Oct 2010)
@@ -61,8 +61,9 @@
 
 <H2>How to Build the BGL</H2>
 <p><b>DON'T!</b> The Boost Graph Library is a header-only library and
-does not need to be built to be used. The only exception is the <a
-href="read_graphviz.html">GraphViz input parser</a>.</p>
+does not need to be built to be used. The only exceptions are the <a
+href="read_graphviz.html">GraphViz input parser</a> and the <a
+href="read_graphml.html">GraphML parser</a>.</p>
 
 <p>When compiling programs that use the BGL, <b>be sure to compile
 with optimization</b>. For instance, select “Release” mode with
Modified: branches/release/libs/graph/example/implicit_graph.cpp
==============================================================================
--- branches/release/libs/graph/example/implicit_graph.cpp	(original)
+++ branches/release/libs/graph/example/implicit_graph.cpp	2010-10-05 14:06:09 EDT (Tue, 05 Oct 2010)
@@ -178,10 +178,6 @@
 For vertex i, this returns edge (i, i+1) and then edge (i, i-1), wrapping
 around the end of the ring as needed.
 
-Because this is an undirected graph, the edge <x,y> is equivalent to <y,x>.
-For clarity's sake, however, this iterator always returns an edge descriptor
-with the smaller vertex index first.
-
 It is implemented with the boost::iterator_adaptor class, adapting an
 offset into the dereference::ring_offset array.
 */
@@ -438,6 +434,10 @@
   return boost::identity_property_map();
 }
 
+// Print edges as (x, y)
+std::ostream& operator<<(std::ostream& output, const edge_descriptor& e) {
+  return output << "(" << e.first << ", " << e.second << ")";
+}
 
 int main (int argc, char const *argv[]) {
   using namespace boost;
@@ -465,11 +465,11 @@
   // Print the outgoing edges of all the vertices.  For n=5 this will print:
   //
   // Vertices, outgoing edges, and adjacent vertices
-  // Vertex 0: <0, 1>  <0, 4>   Adjacent vertices 1 4
-  // Vertex 1: <1, 2>  <1, 0>   Adjacent vertices 2 0
-  // Vertex 2: <2, 3>  <2, 1>   Adjacent vertices 3 1
-  // Vertex 3: <3, 4>  <3, 2>   Adjacent vertices 4 2
-  // Vertex 4: <4, 0>  <4, 3>   Adjacent vertices 0 3
+  // Vertex 0: (0, 1)  (0, 4)   Adjacent vertices 1 4
+  // Vertex 1: (1, 2)  (1, 0)   Adjacent vertices 2 0
+  // Vertex 2: (2, 3)  (2, 1)   Adjacent vertices 3 1
+  // Vertex 3: (3, 4)  (3, 2)   Adjacent vertices 4 2
+  // Vertex 4: (4, 0)  (4, 3)   Adjacent vertices 0 3
   // 5 vertices
   std::cout << "Vertices, outgoing edges, and adjacent vertices" << std::endl;
   vertex_iterator vi, vi_end;
@@ -478,10 +478,8 @@
     std::cout << "Vertex " << u << ": ";
     // Adjacenct edges
     out_edge_iterator ei, ei_end;
-    for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++) {
-      edge_descriptor e = *ei;
-      std::cout << "<" << e.first << ", " << e.second << ">" << "  ";
-    }
+    for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ei++)
+      std::cout << *ei << "  ";
     std::cout << " Adjacent vertices ";
     // Adjacent vertices
     // Here we want our adjacency_iterator and not boost::adjacency_iterator.
@@ -497,18 +495,17 @@
   // will print:
   //
   // Edges and weights
-  // <0, 1> weight 0.5
-  // <1, 2> weight 1.5
-  // <2, 3> weight 2.5
-  // <3, 4> weight 3.5
-  // <4, 0> weight 2
+  // (0, 1) weight 0.5
+  // (1, 2) weight 1.5
+  // (2, 3) weight 2.5
+  // (3, 4) weight 3.5
+  // (4, 0) weight 2
   // 5 edges
   std::cout << "Edges and weights" << std::endl;
   edge_iterator ei, ei_end;
   for (tie(ei, ei_end) = edges(g); ei != ei_end; ei++) {
     edge_descriptor e = *ei;
-    std::cout << "<" << e.first << ", " << e.second << ">"
-              << " weight " << get(edge_weight, g, e) << std::endl;
+    std::cout << e << " weight " << get(edge_weight, g, e) << std::endl;
   }
   std::cout << num_edges(g) << " edges"  << std::endl;
 
Modified: branches/release/libs/graph/test/test_graphs.cpp
==============================================================================
--- branches/release/libs/graph/test/test_graphs.cpp	(original)
+++ branches/release/libs/graph/test/test_graphs.cpp	2010-10-05 14:06:09 EDT (Tue, 05 Oct 2010)
@@ -5,13 +5,13 @@
 // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 #include <iostream>
-
 #include "typestr.hpp"
 
 #include <boost/graph/adjacency_list.hpp>
 #include <boost/graph/adjacency_matrix.hpp>
 #include <boost/graph/undirected_graph.hpp>
 #include <boost/graph/directed_graph.hpp>
+#include <boost/graph/compressed_sparse_row_graph.hpp>
 #include <boost/graph/labeled_graph.hpp>
 #include <boost/graph/subgraph.hpp>
 
@@ -27,142 +27,173 @@
   // Bootstrap all of the tests by declaring a kind graph and  asserting some
   // basic properties about it.
   {
-      typedef undirected_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_undirected_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_mutable_graph<Graph>);
-      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-      Graph g;
-      test_graph(g);
-  }
-  {
-      typedef directed_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_mutable_graph<Graph>);
-      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-      Graph g;
-      test_graph(g);
-  }
-  {
-      typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_undirected_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-      Graph g;
-      test_graph(g);
-  }
-  {
-      typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
-      Graph g;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-      test_graph(g);
-  }
-  {
-      // Common bidi adjlist
-      typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-      Graph g;
-      test_graph(g);
-  }
-  {
-      // Same as above, but testing VL==listS
-      typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-      Graph g;
-      test_graph(g);
-  }
-  {
-      typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(!is_multigraph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
-      BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
-      Graph g(N);
-      test_graph(g);
-  }
-  {
-      typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(!is_multigraph<Graph>);
-      BOOST_META_ASSERT(has_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(has_edge_property<Graph>);
-      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
-      BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
-      Graph g(N);
-      test_graph(g);
-  }
-  /*
-  {
-      typedef labeled_graph<directed_graph<>, unsigned> Graph;
-      BOOST_META_ASSERT(is_directed_graph<Graph>);
-      BOOST_META_ASSERT(is_multigraph<Graph>);
-      BOOST_META_ASSERT(is_incidence_graph<Graph>);
-      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-      BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
-      BOOST_META_ASSERT(is_labeled_graph<Graph>);
-      BOOST_META_ASSERT(!has_vertex_property<Graph>);
-      BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
-      BOOST_META_ASSERT(!has_edge_property<Graph>);
-      BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
-      BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
-      Graph g;
-      test_graph(g);
+    typedef undirected_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_undirected_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_mutable_graph<Graph>);
+    BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+  {
+    typedef directed_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_mutable_graph<Graph>);
+    BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+  {
+    typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_undirected_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+  {
+    typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+    Graph g;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+    test_graph(g);
+  }
+  {
+    // Common bidi adjlist
+    typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+  {
+    // Same as above, but testing VL==listS
+    typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+  {
+    typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(!is_multigraph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+    BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+    Graph g(N);
+    test_graph(g);
+  }
+  {
+    typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(!is_multigraph<Graph>);
+    BOOST_META_ASSERT(has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+    BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+    Graph g(N);
+    test_graph(g);
+  }
+  {
+    typedef labeled_graph<directed_graph<>, unsigned> Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(is_incidence_graph<Graph>);
+    BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+    BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
+    BOOST_META_ASSERT(is_labeled_graph<Graph>);
+    BOOST_META_ASSERT(!has_vertex_property<Graph>);
+    BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(!has_edge_property<Graph>);
+    BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
+    BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
+    Graph g;
+    test_graph(g);
+  }
+
+  // FIXME: CSR doesn't have mutability traits so we can't generalize the
+  // constructions of the required graph. Just assert the properties for now.
+  // NOTE: CSR graphs are also atypical in that they don't have "normal"
+  // vertex and edge properties. They're "abnormal" in the sense that they have
+  // a valid bundled type, but the property types are no_property.
+  {
+    typedef compressed_sparse_row_graph<
+      directedS, VertexBundle, EdgeBundle, GraphBundle
+    > Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(has_graph_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_graph_property<Graph>);
+    BOOST_META_ASSERT(!has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(!has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+  }
+  {
+    typedef compressed_sparse_row_graph<
+      bidirectionalS, VertexBundle, EdgeBundle, GraphBundle
+    > Graph;
+    BOOST_META_ASSERT(is_directed_graph<Graph>);
+    BOOST_META_ASSERT(is_multigraph<Graph>);
+    BOOST_META_ASSERT(has_graph_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_graph_property<Graph>);
+    BOOST_META_ASSERT(!has_vertex_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+    BOOST_META_ASSERT(!has_edge_property<Graph>);
+    BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
   }
-  */
+
 
   // TODO: What other kinds of graphs do we have here...