Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r60789 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/filesystem boost/functional/hash boost/fusion boost/graph boost/integer boost/interprocess boost/intrusive boost/iostreams boost/math boost/numeric/ublas boost/program_options boost/property_tree boost/proto boost/proto/detail boost/python boost/regex 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/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave boost/xpressive doc libs libs/array/doc libs/bimap libs/config libs/filesystem libs/functional/hash libs/fusion libs/graph_parallel libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/proto/doc libs/proto/doc/reference libs/proto/example libs/proto/test libs/python libs/regex libs/regex/doc libs/serialization libs/signals libs/signals2 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/thread/doc libs/timer libs/tr1 libs/type_traits libs/unordered libs/utility libs/uuid libs/wave more people status tools tools/bcp tools/boostbook tools/build/v2 tools/inspect tools/quickbook tools/regression tools/release tools/wave wiki
From: eric_at_[hidden]
Date: 2010-03-23 02:03:14


Author: eric_niebler
Date: 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
New Revision: 60789
URL: http://svn.boost.org/trac/boost/changeset/60789

Log:
Merged revisions 60682,60692,60706,60788 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r60682 | eric_niebler | 2010-03-18 12:32:54 +1100 (Thu, 18 Mar 2010) | 1 line
  
  functional::make_expr and functional::unpack_expr return const-qualified rvalues
........
  r60692 | eric_niebler | 2010-03-19 01:28:31 +1100 (Fri, 19 Mar 2010) | 1 line
  
  fix error in invocation of callable monomorphic function objects, expression self-assignment creates an assign node
........
  r60706 | eric_niebler | 2010-03-20 00:23:26 +1100 (Sat, 20 Mar 2010) | 1 line
  
  try again to get proto assignment overloads right
........
  r60788 | eric_niebler | 2010-03-23 16:07:39 +1100 (Tue, 23 Mar 2010) | 1 line
  
  add an appendix for release notes
........

Added:
   branches/release/libs/proto/doc/release_notes.qbk
      - copied unchanged from r60788, /trunk/libs/proto/doc/release_notes.qbk
Properties modified:
   branches/release/ (props changed)
   branches/release/CMakeLists.txt (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/array.hpp (props changed)
   branches/release/boost/bimap/ (props changed)
   branches/release/boost/config/ (props changed)
   branches/release/boost/detail/ (props changed)
   branches/release/boost/filesystem/ (props changed)
   branches/release/boost/functional/hash/ (props changed)
   branches/release/boost/fusion/ (props changed)
   branches/release/boost/graph/ (props changed)
   branches/release/boost/integer/ (props changed)
   branches/release/boost/interprocess/ (props changed)
   branches/release/boost/intrusive/ (props changed)
   branches/release/boost/iostreams/ (props changed)
   branches/release/boost/math/ (props changed)
   branches/release/boost/numeric/ublas/ (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/regex/ (props changed)
   branches/release/boost/serialization/ (props changed)
   branches/release/boost/signals/ (props changed)
   branches/release/boost/signals2/ (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/type_traits/ (props changed)
   branches/release/boost/unordered/ (props changed)
   branches/release/boost/utility/ (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/array/doc/array.xml (props changed)
   branches/release/libs/bimap/ (props changed)
   branches/release/libs/config/ (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/integer/ (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/ (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/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/regex/ (props changed)
   branches/release/libs/regex/doc/ (props changed)
   branches/release/libs/serialization/ (props changed)
   branches/release/libs/signals/ (props changed)
   branches/release/libs/signals2/ (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/thread/doc/ (props changed)
   branches/release/libs/timer/ (props changed)
   branches/release/libs/tr1/ (props changed)
   branches/release/libs/type_traits/ (props changed)
   branches/release/libs/unordered/ (props changed)
   branches/release/libs/utility/ (props changed)
   branches/release/libs/utility/swap.html (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/people/ (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/quickbook/ (props changed)
   branches/release/tools/regression/ (props changed)
   branches/release/tools/release/ (props changed)
   branches/release/tools/wave/ (props changed)
   branches/release/wiki/ (props changed)
Text files modified:
   branches/release/boost/proto/detail/expr0.hpp | 19 ++++
   branches/release/boost/proto/detail/poly_function.hpp | 9 +
   branches/release/boost/proto/extends.hpp | 117 ++++++++++++++++++++++++++++-
   branches/release/boost/proto/literal.hpp | 2
   branches/release/boost/proto/make_expr.hpp | 8 +-
   branches/release/boost/xpressive/regex_primitives.hpp | 2
   branches/release/libs/proto/doc/acknowledgements.qbk | 2
   branches/release/libs/proto/doc/front_end.qbk | 4
   branches/release/libs/proto/doc/history.qbk | 2
   branches/release/libs/proto/doc/implementation.qbk | 2
   branches/release/libs/proto/doc/proto.qbk | 2
   branches/release/libs/proto/doc/rationale.qbk | 2
   branches/release/libs/proto/doc/reference/extends.xml | 155 ++++++++++++++++++++++++++++-----------
   branches/release/libs/proto/example/calc2.cpp | 2
   branches/release/libs/proto/example/calc3.cpp | 2
   branches/release/libs/proto/test/matches.cpp | 71 +++++++----------
   16 files changed, 292 insertions(+), 109 deletions(-)

Modified: branches/release/boost/proto/detail/expr0.hpp
==============================================================================
--- branches/release/boost/proto/detail/expr0.hpp (original)
+++ branches/release/boost/proto/detail/expr0.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -133,6 +133,25 @@
         /// Assignment
         ///
         /// \param a The rhs.
+ /// \return A new \c expr\<\> node representing an assignment of \c that to \c *this.
+ proto::expr<
+ proto::tag::assign
+ , list2<expr &, expr const &>
+ , 2
+ > const
+ operator =(expr const &a)
+ {
+ proto::expr<
+ proto::tag::assign
+ , list2<expr &, expr const &>
+ , 2
+ > that = {*this, a};
+ return that;
+ }
+
+ /// Assignment
+ ///
+ /// \param a The rhs.
         /// \return A new \c expr\<\> node representing an assignment of \c a to \c *this.
         template<typename A>
         proto::expr<

Modified: branches/release/boost/proto/detail/poly_function.hpp
==============================================================================
--- branches/release/boost/proto/detail/poly_function.hpp (original)
+++ branches/release/boost/proto/detail/poly_function.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -173,12 +173,15 @@
             #include BOOST_PP_ITERATE()
         };
 
+ template<typename T>
+ struct wrap_t;
+
         typedef char poly_function_t;
         typedef char (&mono_function_t)[2];
         typedef char (&unknown_function_t)[3];
-
- template<typename T> poly_function_t test_poly_function(T *, typename T::is_poly_function_base_ * = 0);
- template<typename T> mono_function_t test_poly_function(T *, typename T::result_type * = 0);
+
+ template<typename T> poly_function_t test_poly_function(T *, wrap_t<typename T::is_poly_function_base_> * = 0);
+ template<typename T> mono_function_t test_poly_function(T *, wrap_t<typename T::result_type> * = 0);
         template<typename T> unknown_function_t test_poly_function(T *, ...);
 
         ////////////////////////////////////////////////////////////////////////////////////////////////

Modified: branches/release/boost/proto/extends.hpp
==============================================================================
--- branches/release/boost/proto/extends.hpp (original)
+++ branches/release/boost/proto/extends.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -10,6 +10,7 @@
 #define BOOST_PROTO_EXTENDS_HPP_EAN_11_1_2006
 
 #include <cstddef> // for offsetof
+#include <boost/preprocessor/facilities/empty.hpp>
 #include <boost/preprocessor/tuple/elem.hpp>
 #include <boost/preprocessor/control/if.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
@@ -30,6 +31,12 @@
 #include <boost/proto/traits.hpp>
 #include <boost/proto/generate.hpp>
 
+#ifdef _MSC_VER
+#define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable: 4522))
+#else
+#define BOOST_PROTO_DISABLE_MSVC_C4522
+#endif
+
 namespace boost { namespace proto
 {
     #ifdef __GNUC__
@@ -187,6 +194,68 @@
         typedef void proto_is_aggregate_; \
         /**< INTERNAL ONLY */
 
+ #define BOOST_PROTO_EXTENDS_COPY_ASSIGN_(This, Typename) \
+ BOOST_PROTO_DISABLE_MSVC_C4522 \
+ Typename() boost::result_of< \
+ Typename() This::proto_domain( \
+ boost::proto::expr< \
+ boost::proto::tag::assign \
+ , boost::proto::list2< \
+ This & \
+ , This & \
+ > \
+ , 2 \
+ > \
+ ) \
+ >::type const \
+ operator =(This &a) \
+ { \
+ typedef boost::proto::expr< \
+ boost::proto::tag::assign \
+ , boost::proto::list2< \
+ This & \
+ , This & \
+ > \
+ , 2 \
+ > that_type; \
+ that_type that = { \
+ *this \
+ , a \
+ }; \
+ return Typename() This::proto_domain()(that); \
+ } \
+ \
+ BOOST_PROTO_DISABLE_MSVC_C4522 \
+ Typename() boost::result_of< \
+ Typename() This::proto_domain( \
+ boost::proto::expr< \
+ boost::proto::tag::assign \
+ , boost::proto::list2< \
+ This & \
+ , This const & \
+ > \
+ , 2 \
+ > \
+ ) \
+ >::type const \
+ operator =(This const &a) \
+ { \
+ typedef boost::proto::expr< \
+ boost::proto::tag::assign \
+ , boost::proto::list2< \
+ This & \
+ , This const & \
+ > \
+ , 2 \
+ > that_type; \
+ that_type that = { \
+ *this \
+ , a \
+ }; \
+ return Typename() This::proto_domain()(that); \
+ } \
+ /**/
+
         /// INTERNAL ONLY
         ///
     #define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(Const) \
@@ -251,15 +320,32 @@
         } \
         /**/
 
+ #define BOOST_PROTO_EXTENDS_ASSIGN_CONST_() \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(1) \
+ /**/
+
+ #define BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST_() \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(0) \
+ /**/
+
+ #define BOOST_PROTO_EXTENDS_ASSIGN_() \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(0) \
+ BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(1) \
+ /**/
+
     #define BOOST_PROTO_EXTENDS_ASSIGN_CONST() \
- BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(1)
+ BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME) \
+ BOOST_PROTO_EXTENDS_ASSIGN_CONST_() \
+ /**/
 
     #define BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST() \
- BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(0)
+ BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME) \
+ BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST_() \
+ /**/
 
     #define BOOST_PROTO_EXTENDS_ASSIGN() \
- BOOST_PROTO_EXTENDS_ASSIGN_CONST() \
- BOOST_PROTO_EXTENDS_ASSIGN_NON_CONST() \
+ BOOST_PROTO_EXTENDS_COPY_ASSIGN_(proto_derived_expr, BOOST_PROTO_TYPENAME) \
+ BOOST_PROTO_EXTENDS_ASSIGN_() \
         /**/
 
         /// INTERNAL ONLY
@@ -412,6 +498,21 @@
         BOOST_PROTO_EXTENDS_FUNCTION() \
         /**/
 
+ #define BOOST_PROTO_EXTENDS_USING_ASSIGN(Derived) \
+ typedef typename Derived::proto_extends proto_extends; \
+ using proto_extends::operator =; \
+ BOOST_PROTO_EXTENDS_COPY_ASSIGN_(Derived, BOOST_PROTO_TYPENAME) \
+ /**/
+
+ #define BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT(Derived) \
+ typedef Derived::proto_extends proto_extends; \
+ using proto_extends::operator =; \
+ BOOST_PROTO_EXTENDS_COPY_ASSIGN_(Derived, BOOST_PP_EMPTY) \
+ /**/
+
+ /// INTERNAL ONLY
+ #define BOOST_PROTO_TYPENAME() typename
+
     namespace exprns_
     {
         /// \brief Empty type to be used as a dummy template parameter of
@@ -464,8 +565,9 @@
               : proto_expr_(expr_)
             {}
 
+ typedef extends proto_extends;
             BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
- BOOST_PROTO_EXTENDS_ASSIGN_CONST()
+ BOOST_PROTO_EXTENDS_ASSIGN_CONST_()
             BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST()
 
             // Instead of using BOOST_PROTO_EXTENDS_FUNCTION, which uses
@@ -507,8 +609,9 @@
               : proto_expr_(expr_)
             {}
 
+ typedef extends proto_extends;
             BOOST_PROTO_BASIC_EXTENDS_(Expr, Derived, Domain)
- BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_ASSIGN_()
             BOOST_PROTO_EXTENDS_SUBSCRIPT()
 
             // Instead of using BOOST_PROTO_EXTENDS_FUNCTION, which uses
@@ -555,7 +658,7 @@
             BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_EXTENDS_CHILD, ~)
             typedef void proto_is_aggregate_; /**< INTERNAL ONLY */
 
- BOOST_PROTO_EXTENDS_ASSIGN()
+ BOOST_PROTO_EXTENDS_ASSIGN_()
             BOOST_PROTO_EXTENDS_SUBSCRIPT()
             BOOST_PROTO_EXTENDS_FUNCTION()
 

Modified: branches/release/boost/proto/literal.hpp
==============================================================================
--- branches/release/boost/proto/literal.hpp (original)
+++ branches/release/boost/proto/literal.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -64,7 +64,7 @@
               : base_type(terminal_type::make(u.get()))
             {}
 
- using base_type::operator =;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN(literal)
 
             reference get()
             {

Modified: branches/release/boost/proto/make_expr.hpp
==============================================================================
--- branches/release/boost/proto/make_expr.hpp (original)
+++ branches/release/boost/proto/make_expr.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -559,7 +559,7 @@
                     Tag
                   , Domain
                   , A0 const
- >::type
+ >::type const
                 operator ()(A0 const &a0) const
                 {
                     return proto::detail::make_expr_<
@@ -630,7 +630,7 @@
                 /// \param sequence A Fusion Forward Sequence
                 /// \return <tt>proto::unpack_expr\<Tag, Domain\>(sequence)</tt>
                 template<typename Sequence>
- typename result_of::unpack_expr<Tag, Domain, Sequence const>::type
+ typename result_of::unpack_expr<Tag, Domain, Sequence const>::type const
                 operator ()(Sequence const &sequence) const
                 {
                     return proto::detail::unpack_expr_<
@@ -665,7 +665,7 @@
                 };
 
                 template<typename Sequence>
- typename proto::result_of::unpack_expr<Tag, Domain, Sequence const>::type
+ typename proto::result_of::unpack_expr<Tag, Domain, Sequence const>::type const
                 operator ()(Sequence const &sequence) const
                 {
                     return proto::detail::unpack_expr_<
@@ -1058,7 +1058,7 @@
             Tag
           , Domain
             BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
- >::type
+ >::type const
         operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, const A, &a)) const
         {
             return proto::detail::make_expr_<

Modified: branches/release/boost/xpressive/regex_primitives.hpp
==============================================================================
--- branches/release/boost/xpressive/regex_primitives.hpp (original)
+++ branches/release/boost/xpressive/regex_primitives.hpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -566,7 +566,7 @@
         return this->proto_base();
     }
 
- using base_type::operator =;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT(mark_tag)
 };
 
 // This macro is used when declaring mark_tags that are global because

Modified: branches/release/libs/proto/doc/acknowledgements.qbk
==============================================================================
--- branches/release/libs/proto/doc/acknowledgements.qbk (original)
+++ branches/release/libs/proto/doc/acknowledgements.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -5,7 +5,7 @@
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  /]
 
-[section:acknowledgements Appendix D: Acknowledgements]
+[section:acknowledgements Appendix E: Acknowledgements]
 
 I'd like to thank Joel de Guzman and Hartmut Kaiser for being willing to take a
 chance on using Proto for their work on Spirit-2 and Karma when Proto was

Modified: branches/release/libs/proto/doc/front_end.qbk
==============================================================================
--- branches/release/libs/proto/doc/front_end.qbk (original)
+++ branches/release/libs/proto/doc/front_end.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -324,7 +324,7 @@
 
         // This is usually needed because by default, the compiler-
         // generated assignment operator hides extends<>::operator=
- using base_type::operator =;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN(calculator)
 
         typedef double result_type;
 
@@ -351,7 +351,7 @@
 
 You might be thinking that this expression extension business is unnecessarily complicated. After all, isn't this why C++ supports inheritance? Why can't [^calculator<Expr>] just inherit from [^Expr] directly? The reason is because [^Expr], which presumably is an instantiation of _expr_, has expression template-building operator overloads that will be incorrect for derived types. They will store `*this` by reference to `proto::expr<>`, effectively slicing off any derived parts. _extends_ gives your derived types operator overloads that don't slice off your additional members.]
 
-Although not strictly necessary in this case, we bring `extends<>::operator=` into scope with a `using` declaration. This is really only necessary if you want expressions like `_1 = 3` to create a lazily evaluated assignment. _extends_ defines the appropriate `operator=` for you, but the compiler-generated `calculator<>::operator=` will hide it unless you make it available with the `using` declaration.
+Although not strictly necessary in this case, we bring `extends<>::operator=` into scope with the `BOOST_PROTO_EXTENDS_USING_ASSIGN()` macro. This is really only necessary if you want expressions like `_1 = 3` to create a lazily evaluated assignment. _extends_ defines the appropriate `operator=` for you, but the compiler-generated `calculator<>::operator=` will hide it unless you make it available with the macro.
 
 Note that in the implementation of `calculator<>::operator()`, we evaluate the expression with the `calculator_context` we defined earlier. As we saw before, the context is what gives the operators their meaning. In the case of the calculator, the context is also what defines the meaning of the placeholder terminals.
 

Modified: branches/release/libs/proto/doc/history.qbk
==============================================================================
--- branches/release/libs/proto/doc/history.qbk (original)
+++ branches/release/libs/proto/doc/history.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -5,7 +5,7 @@
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  /]
 
-[section:history Appendix A: History]
+[section:history Appendix B: History]
 
 [variablelist
 [

Modified: branches/release/libs/proto/doc/implementation.qbk
==============================================================================
--- branches/release/libs/proto/doc/implementation.qbk (original)
+++ branches/release/libs/proto/doc/implementation.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -5,7 +5,7 @@
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  /]
 
-[section:implementation Appendix C: Implementation Notes]
+[section:implementation Appendix D: Implementation Notes]
 
 [section:sfinae Quick-n-Dirty Type Categorization]
 

Modified: branches/release/libs/proto/doc/proto.qbk
==============================================================================
--- branches/release/libs/proto/doc/proto.qbk (original)
+++ branches/release/libs/proto/doc/proto.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -279,6 +279,8 @@
 [section Appendices]
 [/=================]
 
+[include release_notes.qbk]
+
 [include history.qbk]
 
 [include rationale.qbk]

Modified: branches/release/libs/proto/doc/rationale.qbk
==============================================================================
--- branches/release/libs/proto/doc/rationale.qbk (original)
+++ branches/release/libs/proto/doc/rationale.qbk 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -5,7 +5,7 @@
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  /]
 
-[section:rationale Appendix B: Rationale]
+[section:rationale Appendix C: Rationale]
 
 [/==================================================]
 [section:static_initialization Static Initialization]

Modified: branches/release/libs/proto/doc/reference/extends.xml
==============================================================================
--- branches/release/libs/proto/doc/reference/extends.xml (original)
+++ branches/release/libs/proto/doc/reference/extends.xml 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -83,7 +83,7 @@
     // Unhide proto::extends::operator=
     // (This is only necessary if a lazy assignment operator
     // makes sense for your domain-specific language.)
- using base_type::operator=;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN(my_expr)
     
     /*
     ... domain-specific members go here ...
@@ -96,6 +96,12 @@
               <listitem>
                 <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
               </listitem>
+ <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_USING_ASSIGN</macroname>()</computeroutput>
+ </listitem>
+ <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT</macroname>()</computeroutput>
+ </listitem>
             </itemizedlist>
           </para>
         </description>
@@ -354,6 +360,44 @@
     </namespace>
   </namespace>
 
+ <macro name="BOOST_PROTO_EXTENDS" kind="functionlike">
+ <macro-parameter name="Expr"/>
+ <macro-parameter name="Derived"/>
+ <macro-parameter name="Domain"/>
+ <purpose>For creating expression wrappers that add behaviors to a Proto expression template, like
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>,
+ but while retaining POD-ness of the expression wrapper.</purpose>
+ <description>
+ <para>
+ Equivalent to:
+ <programlisting><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>(Expr, Derived, Domain)
+<macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()
+<macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()
+<macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</programlisting>
+ </para>
+ <para>
+ <emphasis role="bold">Example:</emphasis><programlisting>template&lt; class Expr &gt;
+struct my_expr;
+
+struct my_domain
+ : <classname alt="boost::proto::domain">proto::domain</classname>&lt; <classname alt="boost::proto::pod_generator">proto::pod_generator</classname>&lt; my_expr &gt; &gt;
+{};
+
+template&lt; class Expr &gt;
+struct my_expr
+{
+ // OK, this makes my_expr&lt;&gt; a valid Proto expression extension.
+ // my_expr&lt;&gt; has overloaded assignment, subscript,
+ // and function call operators that build expression templates.
+ <macroname>BOOST_PROTO_EXTENDS</macroname>(Expr, my_expr, my_domain)
+};
+
+// OK, my_expr&lt;&gt; is POD, so this is statically initialized:
+my_expr&lt; <classname alt="boost::proto::terminal">proto::terminal</classname>&lt;int&gt;::type &gt; const _1 = {{1}};</programlisting>
+ </para>
+ </description>
+ </macro>
+
   <macro name="BOOST_PROTO_BASIC_EXTENDS" kind="functionlike">
     <macro-parameter name="Expr"/>
     <macro-parameter name="Derived"/>
@@ -446,14 +490,17 @@
     </description>
   </macro>
 
- <macro name="BOOST_PROTO_EXTENDS_SUBSCRIPT" kind="functionlike">
- <purpose>For adding to an expression extension class an overloaded subscript operator that
- builds an expression template.</purpose>
+ <macro name="BOOST_PROTO_EXTENDS_FUNCTION" kind="functionlike">
+ <purpose>For adding to an expression extension class a set of overloaded function call operators
+ that build expression templates.</purpose>
     <description>
       <para>
- Use <computeroutput>BOOST_PROTO_EXTENDS_SUBSCRIPT()</computeroutput> after <computeroutput>
+ Use <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> after <computeroutput>
         <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput> to give an expression
- extension class an overloaded subscript operator that builds an expression template.
+ extension class a set of overloaded function call operators that build expression templates.
+ In addition, <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> adds a nested
+ <computeroutput>result&lt;&gt;</computeroutput> class template that is a metafunction for
+ calculating the return type of the overloaded function call operators.
       </para>
       <para>
         See also:
@@ -465,7 +512,7 @@
             <computeroutput><macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()</computeroutput>
           </listitem>
           <listitem>
- <computeroutput><macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</computeroutput>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()</computeroutput>
           </listitem>
           <listitem>
             <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
@@ -475,17 +522,14 @@
     </description>
   </macro>
 
- <macro name="BOOST_PROTO_EXTENDS_FUNCTION" kind="functionlike">
- <purpose>For adding to an expression extension class a set of overloaded function call operators
- that build expression templates.</purpose>
+ <macro name="BOOST_PROTO_EXTENDS_SUBSCRIPT" kind="functionlike">
+ <purpose>For adding to an expression extension class an overloaded subscript operator that
+ builds an expression template.</purpose>
     <description>
       <para>
- Use <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> after <computeroutput>
+ Use <computeroutput>BOOST_PROTO_EXTENDS_SUBSCRIPT()</computeroutput> after <computeroutput>
         <macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>()</computeroutput> to give an expression
- extension class a set of overloaded function call operators that build expression templates.
- In addition, <computeroutput>BOOST_PROTO_EXTENDS_FUNCTION()</computeroutput> adds a nested
- <computeroutput>result&lt;&gt;</computeroutput> class template that is a metafunction for
- calculating the return type of the overloaded function call operators.
+ extension class an overloaded subscript operator that builds an expression template.
       </para>
       <para>
         See also:
@@ -497,7 +541,7 @@
             <computeroutput><macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()</computeroutput>
           </listitem>
           <listitem>
- <computeroutput><macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()</computeroutput>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</computeroutput>
           </listitem>
           <listitem>
             <computeroutput><macroname>BOOST_PROTO_EXTENDS</macroname>()</computeroutput>
@@ -507,40 +551,63 @@
     </description>
   </macro>
 
- <macro name="BOOST_PROTO_EXTENDS" kind="functionlike">
- <macro-parameter name="Expr"/>
+ <macro name="BOOST_PROTO_EXTENDS_USING_ASSIGN" kind="functionlike">
     <macro-parameter name="Derived"/>
- <macro-parameter name="Domain"/>
- <purpose>For creating expression wrappers that add behaviors to a Proto expression template, like
- <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>,
- but while retaining POD-ness of the expression wrapper.</purpose>
+ <purpose>For exposing in classes that inherit from
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ the overloaded assignment operators defined therein.</purpose>
     <description>
       <para>
- Equivalent to:
- <programlisting><macroname>BOOST_PROTO_BASIC_EXTENDS</macroname>(Expr, Derived, Domain)
-<macroname>BOOST_PROTO_EXTENDS_ASSIGN</macroname>()
-<macroname>BOOST_PROTO_EXTENDS_SUBSCRIPT</macroname>()
-<macroname>BOOST_PROTO_EXTENDS_FUNCTION</macroname>()</programlisting>
+ The standard usage of
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ is to inherit from it. However, the derived class automatically gets a compiler-generated assignment
+ operator that will hide the ones defined in
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>.
+ Use <code>BOOST_PROTO_EXTENDS_USING_ASSIGN()</code> in the derived class to unhide the assignment
+ operators defined in
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>.
       </para>
       <para>
- <emphasis role="bold">Example:</emphasis><programlisting>template&lt; class Expr &gt;
-struct my_expr;
-
-struct my_domain
- : <classname alt="boost::proto::domain">proto::domain</classname>&lt; <classname alt="boost::proto::pod_generator">proto::pod_generator</classname>&lt; my_expr &gt; &gt;
-{};
-
-template&lt; class Expr &gt;
-struct my_expr
-{
- // OK, this makes my_expr&lt;&gt; a valid Proto expression extension.
- // my_expr&lt;&gt; has overloaded assignment, subscript,
- // and function call operators that build expression templates.
- <macroname>BOOST_PROTO_EXTENDS</macroname>(Expr, my_expr, my_domain)
-};
+ See <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ for an example that demonstrates usage of <code>BOOST_PROTO_EXTENDS_USING_ASSIGN()</code>.
+ </para>
+ </description>
+ </macro>
 
-// OK, my_expr&lt;&gt; is POD, so this is statically initialized:
-my_expr&lt; <classname alt="boost::proto::terminal">proto::terminal</classname>&lt;int&gt;::type &gt; const _1 = {{1}};</programlisting>
+ <macro name="BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT" kind="functionlike">
+ <macro-parameter name="Derived"/>
+ <purpose>For exposing in classes that inherit from
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ the overloaded assignment operators defined therein. Unlike the
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_USING_ASSIGN</macroname>()</computeroutput> macro,
+ <code>BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT()</code> is for use in non-dependent
+ contexts.
+ </purpose>
+ <description>
+ <para>
+ The standard usage of
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ is to define a class template that inherits from it. The derived class template automatically gets a
+ compiler-generated assignment operator that hides the ones defined in
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>.
+ Using <code>BOOST_PROTO_EXTENDS_USING_ASSIGN()</code> in the derived class solves this problem.
+ </para>
+ <para>
+ However, if the expression extension is an ordinary class and not a class template, the usage of
+ <code>BOOST_PROTO_EXTENDS_USING_ASSIGN()</code> is in a so-called non-dependent context. In plain English,
+ it means it is illegal to use <code>typename</code> in some places where it is required in a class template.
+ In those cases, you should use <code>BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT()</code> instead.
+ </para>
+ <para>
+ See also:
+ <itemizedlist>
+ <listitem>
+ <computeroutput><classname alt="boost::proto::extends">proto::extends&lt;&gt;</classname></computeroutput>
+ </listitem>
+ <listitem>
+ <computeroutput><macroname>BOOST_PROTO_EXTENDS_USING_ASSIGN</macroname>()</computeroutput>
+ </listitem>
+ </itemizedlist>
       </para>
     </description>
   </macro>

Modified: branches/release/libs/proto/example/calc2.cpp
==============================================================================
--- branches/release/libs/proto/example/calc2.cpp (original)
+++ branches/release/libs/proto/example/calc2.cpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -62,7 +62,7 @@
       : base_type(expr)
     {}
 
- using base_type::operator =;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN(calculator_expression)
 
     // Override operator () to evaluate the expression
     double operator ()() const

Modified: branches/release/libs/proto/example/calc3.cpp
==============================================================================
--- branches/release/libs/proto/example/calc3.cpp (original)
+++ branches/release/libs/proto/example/calc3.cpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -97,7 +97,7 @@
       : base_type(expr)
     {}
 
- using base_type::operator =;
+ BOOST_PROTO_EXTENDS_USING_ASSIGN(calculator_expression)
 
     // Override operator () to evaluate the expression
     double operator ()() const

Modified: branches/release/libs/proto/test/matches.cpp
==============================================================================
--- branches/release/libs/proto/test/matches.cpp (original)
+++ branches/release/libs/proto/test/matches.cpp 2010-03-23 02:03:12 EDT (Tue, 23 Mar 2010)
@@ -13,24 +13,13 @@
 #include <boost/mpl/placeholders.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/proto/core.hpp>
+#include <boost/proto/debug.hpp>
 #include <boost/proto/transform/arg.hpp>
 #include <boost/test/unit_test.hpp>
 
 using namespace boost;
 using namespace proto;
 
-template<typename Grammar, typename Expr>
-void assert_matches(Expr const &expr)
-{
- BOOST_MPL_ASSERT((matches<Expr, Grammar>));
-}
-
-template<typename Grammar, typename Expr>
-void assert_not_matches(Expr const &expr)
-{
- BOOST_MPL_ASSERT_NOT((matches<Expr, Grammar>));
-}
-
 struct int_convertible
 {
     int_convertible() {}
@@ -119,24 +108,24 @@
     assert_matches< terminal<int> >( as_child(1) );
     assert_matches< terminal<int> >( as_expr(1) );
 
- assert_not_matches< terminal<int> >( lit('a') );
- assert_not_matches< terminal<int> >( as_child('a') );
- assert_not_matches< terminal<int> >( as_expr('a') );
+ assert_matches_not< terminal<int> >( lit('a') );
+ assert_matches_not< terminal<int> >( as_child('a') );
+ assert_matches_not< terminal<int> >( as_expr('a') );
 
     assert_matches< terminal<convertible_to<int> > >( lit('a') );
     assert_matches< terminal<convertible_to<int> > >( as_child('a') );
     assert_matches< terminal<convertible_to<int> > >( as_expr('a') );
 
- assert_not_matches< terminal<int> >( lit((int_convertible())) );
- assert_not_matches< terminal<int> >( as_child((int_convertible())) );
- assert_not_matches< terminal<int> >( as_expr((int_convertible())) );
+ assert_matches_not< terminal<int> >( lit((int_convertible())) );
+ assert_matches_not< terminal<int> >( as_child((int_convertible())) );
+ assert_matches_not< terminal<int> >( as_expr((int_convertible())) );
 
     assert_matches< terminal<convertible_to<int> > >( lit((int_convertible())) );
     assert_matches< terminal<convertible_to<int> > >( as_child((int_convertible())) );
     assert_matches< terminal<convertible_to<int> > >( as_expr((int_convertible())) );
 
     assert_matches< if_<is_same<_value, int>() > >( lit(1) );
- assert_not_matches< if_<is_same<_value, int>() > >( lit('a') );
+ assert_matches_not< if_<is_same<_value, int>() > >( lit('a') );
 
     assert_matches<
         and_<
@@ -145,7 +134,7 @@
>
>( lit(1) );
 
- assert_not_matches<
+ assert_matches_not<
         and_<
             terminal<_>
           , if_<is_same<_value, int>() >
@@ -172,7 +161,7 @@
     assert_matches< terminal<char [N]> >( as_child("hello") );
     assert_matches< terminal<char [N]> >( as_expr("hello") );
 
- assert_not_matches< if_<is_same<_value, int>()> >( lit("hello") );
+ assert_matches_not< if_<is_same<_value, int>()> >( lit("hello") );
 
     assert_matches< terminal<std::string> >( lit(std::string("hello")) );
     assert_matches< terminal<std::string> >( as_child(std::string("hello")) );
@@ -182,13 +171,13 @@
     assert_matches< terminal<std::basic_string<_> > >( as_child(std::string("hello")) );
     assert_matches< terminal<std::basic_string<_> > >( as_expr(std::string("hello")) );
 
- assert_not_matches< terminal<std::basic_string<_> > >( lit(1) );
- assert_not_matches< terminal<std::basic_string<_> > >( as_child(1) );
- assert_not_matches< terminal<std::basic_string<_> > >( as_expr(1) );
-
- assert_not_matches< terminal<std::basic_string<_,_,_> > >( lit(1) );
- assert_not_matches< terminal<std::basic_string<_,_,_> > >( as_child(1) );
- assert_not_matches< terminal<std::basic_string<_,_,_> > >( as_expr(1) );
+ assert_matches_not< terminal<std::basic_string<_> > >( lit(1) );
+ assert_matches_not< terminal<std::basic_string<_> > >( as_child(1) );
+ assert_matches_not< terminal<std::basic_string<_> > >( as_expr(1) );
+
+ assert_matches_not< terminal<std::basic_string<_,_,_> > >( lit(1) );
+ assert_matches_not< terminal<std::basic_string<_,_,_> > >( as_child(1) );
+ assert_matches_not< terminal<std::basic_string<_,_,_> > >( as_expr(1) );
 
     #if BOOST_WORKAROUND(__HP_aCC, BOOST_TESTED_AT(61700))
     typedef std::string const const_string;
@@ -198,15 +187,15 @@
     
     assert_matches< terminal<std::basic_string<_> const & > >( lit(const_string("hello")) );
     assert_matches< terminal<std::basic_string<_> const & > >( as_child(const_string("hello")) );
- assert_not_matches< terminal<std::basic_string<_> const & > >( as_expr(const_string("hello")) );
+ assert_matches_not< terminal<std::basic_string<_> const & > >( as_expr(const_string("hello")) );
 
     assert_matches< terminal< void(&)() > >( lit(a_function) );
     assert_matches< terminal< void(&)() > >( as_child(a_function) );
     assert_matches< terminal< void(&)() > >( as_expr(a_function) );
 
- assert_not_matches< terminal< void(*)() > >( lit(a_function) );
- assert_not_matches< terminal< void(*)() > >( as_child(a_function) );
- assert_not_matches< terminal< void(*)() > >( as_expr(a_function) );
+ assert_matches_not< terminal< void(*)() > >( lit(a_function) );
+ assert_matches_not< terminal< void(*)() > >( as_child(a_function) );
+ assert_matches_not< terminal< void(*)() > >( as_expr(a_function) );
 
     assert_matches< terminal< convertible_to<void(*)()> > >( lit(a_function) );
     assert_matches< terminal< convertible_to<void(*)()> > >( as_child(a_function) );
@@ -218,7 +207,7 @@
 
     assert_matches< terminal< void(* const &)() > >( lit(&a_function) );
     assert_matches< terminal< void(* const &)() > >( as_child(&a_function) );
- assert_not_matches< terminal< void(* const &)() > >( as_expr(&a_function) );
+ assert_matches_not< terminal< void(* const &)() > >( as_expr(&a_function) );
 
     assert_matches<
         or_<
@@ -227,7 +216,7 @@
>
>( lit(1) );
 
- assert_not_matches<
+ assert_matches_not<
         or_<
             if_<is_same<_value, char>() >
           , if_<is_same<_value, int>() >
@@ -235,19 +224,19 @@
>( lit(1u) );
 
     assert_matches< Input >( cin_ >> 1 >> 2 >> 3 );
- assert_not_matches< Output >( cin_ >> 1 >> 2 >> 3 );
+ assert_matches_not< Output >( cin_ >> 1 >> 2 >> 3 );
 
     assert_matches< Output >( cout_ << 1 << 2 << 3 );
- assert_not_matches< Input >( cout_ << 1 << 2 << 3 );
+ assert_matches_not< Input >( cout_ << 1 << 2 << 3 );
 
     assert_matches< function< terminal<int>, vararg< terminal<char> > > >( lit(1)('a','b','c','d') );
- assert_not_matches< function< terminal<int>, vararg< terminal<char> > > >( lit(1)('a','b','c',"d") );
+ assert_matches_not< function< terminal<int>, vararg< terminal<char> > > >( lit(1)('a','b','c',"d") );
 
     assert_matches< Anything >( cout_ << 1 << +lit('a') << lit(1)('a','b','c',"d") );
 
     assert_matches< proto::switch_<MyCases> >( lit(1) >> 'a' );
     assert_matches< proto::switch_<MyCases> >( lit(1) + 'a' );
- assert_not_matches< proto::switch_<MyCases> >( lit(1) << 'a' );
+ assert_matches_not< proto::switch_<MyCases> >( lit(1) << 'a' );
 
     number<int, two_complement_c> num;
     assert_matches<NumberGrammar>(proto::as_expr(num));
@@ -257,11 +246,11 @@
         proto::nullary_expr<my_terminal, int>::type i = {0};
 
         assert_matches<proto::nullary_expr<my_terminal, _> >( i );
- assert_not_matches<proto::terminal<_> >( i );
+ assert_matches_not<proto::terminal<_> >( i );
 
         proto::terminal<int>::type j = {0};
         assert_matches<proto::terminal<_> >( j );
- assert_not_matches<proto::nullary_expr<my_terminal, _> >( j );
+ assert_matches_not<proto::nullary_expr<my_terminal, _> >( j );
 
         assert_matches<proto::nullary_expr<_, _> >( i );
     }
@@ -269,7 +258,7 @@
     // check 0 and 1 arg forms or or_ and and_
     {
         assert_matches< proto::and_<> >( lit(1) );
- assert_not_matches< proto::or_<> >( lit(1) );
+ assert_matches_not< proto::or_<> >( lit(1) );
 
         assert_matches< proto::and_<proto::terminal<int> > >( lit(1) );
         assert_matches< proto::or_<proto::terminal<int> > >( lit(1) );


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk