$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60405 - in branches/release: . boost boost/accumulators/numeric/functional boost/algorithm/string boost/bimap boost/config boost/filesystem boost/fusion boost/graph boost/integer boost/interprocess boost/intrusive boost/iostreams boost/math boost/numeric/ublas boost/program_options boost/property_tree boost/python boost/regex 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/uuid boost/variant boost/wave libs libs/array/doc libs/bimap libs/config libs/filesystem 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/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/uuid libs/wave more people status tools tools/bcp tools/inspect tools/regression tools/release tools/wave wiki
From: eric_at_[hidden]
Date: 2010-03-09 21:31:35
Author: eric_niebler
Date: 2010-03-09 21:31:34 EST (Tue, 09 Mar 2010)
New Revision: 60405
URL: http://svn.boost.org/trac/boost/changeset/60405
Log:
Merged revisions 59374 via svnmerge from 
https://svn.boost.org/svn/boost/trunk
........
  r59374 | eric_niebler | 2010-01-31 11:27:21 +1100 (Sun, 31 Jan 2010) | 1 line
  
  avoid premature template evaluation in operator overload return types
........
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/array.hpp   (props changed)
   branches/release/boost/bimap/   (props changed)
   branches/release/boost/config/   (props changed)
   branches/release/boost/filesystem/   (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/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/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/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/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/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/inspect/   (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/accumulators/numeric/functional/valarray.hpp |    21 +++++++++++++++------                   
   branches/release/boost/accumulators/numeric/functional/vector.hpp   |    21 +++++++++++++++------                   
   2 files changed, 30 insertions(+), 12 deletions(-)
Modified: branches/release/boost/accumulators/numeric/functional/valarray.hpp
==============================================================================
--- branches/release/boost/accumulators/numeric/functional/valarray.hpp	(original)
+++ branches/release/boost/accumulators/numeric/functional/valarray.hpp	2010-03-09 21:31:34 EST (Tue, 09 Mar 2010)
@@ -29,12 +29,21 @@
 {
     namespace operators
     {
+        namespace detail
+        {
+            template<typename Fun>
+            struct make_valarray
+            {
+                typedef std::valarray<typename Fun::result_type> type;
+            };
+        }
+
         ///////////////////////////////////////////////////////////////////////////////
         // Handle valarray<Left> / Right where Right is a scalar and Right != Left.
         template<typename Left, typename Right>
-        typename enable_if<
+        typename lazy_enable_if<
             mpl::and_<is_scalar<Right>, mpl::not_<is_same<Left, Right> > >
-          , std::valarray<typename functional::divides<Left, Right>::result_type>
+          , detail::make_valarray<functional::divides<Left, Right> >
         >::type
         operator /(std::valarray<Left> const &left, Right const &right)
         {
@@ -50,9 +59,9 @@
         ///////////////////////////////////////////////////////////////////////////////
         // Handle valarray<Left> * Right where Right is a scalar and Right != Left.
         template<typename Left, typename Right>
-        typename enable_if<
+        typename lazy_enable_if<
             mpl::and_<is_scalar<Right>, mpl::not_<is_same<Left, Right> > >
-          , std::valarray<typename functional::multiplies<Left, Right>::result_type>
+          , detail::make_valarray<functional::multiplies<Left, Right> >
         >::type
         operator *(std::valarray<Left> const &left, Right const &right)
         {
@@ -68,9 +77,9 @@
         ///////////////////////////////////////////////////////////////////////////////
         // Handle valarray<Left> + valarray<Right> where Right != Left.
         template<typename Left, typename Right>
-        typename disable_if<
+        typename lazy_disable_if<
             is_same<Left, Right>
-          , std::valarray<typename functional::plus<Left, Right>::result_type>
+          , detail::make_valarray<functional::plus<Left, Right> >
         >::type
         operator +(std::valarray<Left> const &left, std::valarray<Right> const &right)
         {
Modified: branches/release/boost/accumulators/numeric/functional/vector.hpp
==============================================================================
--- branches/release/boost/accumulators/numeric/functional/vector.hpp	(original)
+++ branches/release/boost/accumulators/numeric/functional/vector.hpp	2010-03-09 21:31:34 EST (Tue, 09 Mar 2010)
@@ -28,12 +28,21 @@
 {
     namespace operators
     {
+        namespace detail
+        {
+            template<typename Fun>
+            struct make_vector
+            {
+                typedef std::vector<typename Fun::result_type> type;
+            };
+        }
+
         ///////////////////////////////////////////////////////////////////////////////
         // Handle vector<Left> / Right where Right is a scalar.
         template<typename Left, typename Right>
-        typename enable_if<
+        typename lazy_enable_if<
             is_scalar<Right>
-          , std::vector<typename functional::divides<Left, Right>::result_type>
+          , detail::make_vector<functional::divides<Left, Right> >
         >::type
         operator /(std::vector<Left> const &left, Right const &right)
         {
@@ -64,9 +73,9 @@
         ///////////////////////////////////////////////////////////////////////////////
         // Handle vector<Left> * Right where Right is a scalar.
         template<typename Left, typename Right>
-        typename enable_if<
+        typename lazy_enable_if<
             is_scalar<Right>
-          , std::vector<typename functional::multiplies<Left, Right>::result_type>
+          , detail::make_vector<functional::multiplies<Left, Right> >
         >::type
         operator *(std::vector<Left> const &left, Right const &right)
         {
@@ -82,9 +91,9 @@
         ///////////////////////////////////////////////////////////////////////////////
         // Handle Left * vector<Right> where Left is a scalar.
         template<typename Left, typename Right>
-        typename enable_if<
+        typename lazy_enable_if<
             is_scalar<Left>
-          , std::vector<typename functional::multiplies<Left, Right>::result_type>
+          , detail::make_vector<functional::multiplies<Left, Right> >
         >::type
         operator *(Left const &left, std::vector<Right> const &right)
         {