Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r79683 - in sandbox/icl/boost/icl: . concept detail type_traits
From: afojgo_at_[hidden]
Date: 2012-07-22 18:16:55


Author: jofaber
Date: 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
New Revision: 79683
URL: http://svn.boost.org/trac/boost/changeset/79683

Log:
Merged revision(s) 71362-79210 from trunk/boost/icl:
Added macro BOOST_ICL_USE_COMPARE_STD_GREATER to change container and interval orderings for the library.
This can be used to change the compare-ordering for whole test-programs. (ticket #5482).
........
Patch sent by Christoffer Jefferson, 04-22-2001.
The following patch does two things:
1) Cleans up a bunch of warnings to do with "unused parameter", which I get in clang.
2) Add a couple of headers which clang needs.

........
Bug fix for ticket 5559: Assertion for numeric_minimum failed for std::greater ordering.
Added a Compare-parameter and a partial specialization for struct template numeric_minimum.
........
Bug fix for ticket 5559: Assertion for numeric_minimum failed for std::greater ordering. Adjustments for portability.
........
Bug fix for ticket 5559: Assertion for numeric_minimum failed for std::greater ordering. Adjustments for portability 2.
........
Fixed ticket #5562: typo in boost\icl\concept\element_set.hpp
........
Cleaning up tests after checking last bug claims by Denis.
........
eliminated test_case_template.hpp
........
Fixed ticket #6095 filed by Marvin Sielenkemper. https://svn.boost.org/trac/boost/ticket/6095. Completing is_empty for open intervals (numeric_limits<domain_type>::max(), x).
........
Resolving ambiguity in call of identity_element.
........
Polished ticket #6095 filed by Marvin Sielenkemper. https://svn.boost.org/trac/boost/ticket/6095. Improved implementation of is_empty for open intervals as suggested by Marvin.
........
Replaced TABs by BLANKs. Bug fix ticket #6095 complete.
........
Bugfix ticket 6210. In addition: Some changes for introducing move semantics.
........
Added move emulation.
........
Fixed a configuration error.
........
Generated tests (prefixed by bcont_) for an implementation variant using Boost.Container.
........
Fixed bug in move constructor.
........
Portability fix for gcc.
........
Workaround for gcc static_cast complaints in move emulation tests.
........
Replaced move emulation by c++11. Now using c++11 move ctors and assignment operators.
........
Adding vc10 convenience project files
........
Adding vc10 convenience project files
........
Added move semantics for T operators(...) according to the Dave-Abrahams-Transformation
(http://cpp-next.com/archive/2009/09/making-your-next-move/). Worked like a charm ;)
........
Fixing missing reference to boost::move.
........
Fixed multiple definition error reported by Rajalakshmi Iyer.
........
Fix for ticket #6924: Now using insert with hint.
........
Fixed ticket #6924 (reporter: John Reid). Improvements of icl/functors.hpp.
........

Properties modified:
   sandbox/icl/boost/icl/ (props changed)
Text files modified:
   sandbox/icl/boost/icl/associative_interval_container.hpp | 1
   sandbox/icl/boost/icl/closed_interval.hpp | 3
   sandbox/icl/boost/icl/concept/element_set.hpp | 2
   sandbox/icl/boost/icl/concept/interval.hpp | 100 +++++++-----
   sandbox/icl/boost/icl/concept/interval_associator.hpp | 319 +++++++++++++++++++++++++++++++++++++++
   sandbox/icl/boost/icl/concept/interval_bounds.hpp | 6
   sandbox/icl/boost/icl/concept/interval_map.hpp | 2
   sandbox/icl/boost/icl/continuous_interval.hpp | 3
   sandbox/icl/boost/icl/detail/interval_map_algo.hpp | 10
   sandbox/icl/boost/icl/discrete_interval.hpp | 3
   sandbox/icl/boost/icl/functors.hpp | 49 ++---
   sandbox/icl/boost/icl/gregorian.hpp | 8
   sandbox/icl/boost/icl/impl_config.hpp | 45 ++--
   sandbox/icl/boost/icl/interval_base_map.hpp | 29 +++
   sandbox/icl/boost/icl/interval_base_set.hpp | 42 ++++-
   sandbox/icl/boost/icl/interval_map.hpp | 27 +++
   sandbox/icl/boost/icl/interval_set.hpp | 20 ++
   sandbox/icl/boost/icl/left_open_interval.hpp | 5
   sandbox/icl/boost/icl/map.hpp | 59 +++++-
   sandbox/icl/boost/icl/open_interval.hpp | 6
   sandbox/icl/boost/icl/ptime.hpp | 8
   sandbox/icl/boost/icl/right_open_interval.hpp | 2
   sandbox/icl/boost/icl/separate_interval_set.hpp | 19 ++
   sandbox/icl/boost/icl/set.hpp | 12
   sandbox/icl/boost/icl/split_interval_map.hpp | 25 ++
   sandbox/icl/boost/icl/split_interval_set.hpp | 19 ++
   sandbox/icl/boost/icl/type_traits/infinity.hpp | 2
   sandbox/icl/boost/icl/type_traits/is_discrete.hpp | 1
   sandbox/icl/boost/icl/type_traits/is_numeric.hpp | 21 +
   29 files changed, 685 insertions(+), 163 deletions(-)

Modified: sandbox/icl/boost/icl/associative_interval_container.hpp
==============================================================================
--- sandbox/icl/boost/icl/associative_interval_container.hpp (original)
+++ sandbox/icl/boost/icl/associative_interval_container.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -8,6 +8,7 @@
 #ifndef BOOST_ICL_ASSOCIATIVE_INTERVAL_CONTAINER_HPP_JOFA_101023
 #define BOOST_ICL_ASSOCIATIVE_INTERVAL_CONTAINER_HPP_JOFA_101023
 
+#include <boost/icl/impl_config.hpp>
 #include <boost/icl/concept/comparable.hpp>
 #include <boost/icl/concept/joinable.hpp>
 #include <boost/icl/concept/container.hpp>

Modified: sandbox/icl/boost/icl/closed_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/closed_interval.hpp (original)
+++ sandbox/icl/boost/icl/closed_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -22,6 +22,7 @@
 public:
     typedef closed_interval<DomainT,Compare> type;
     typedef DomainT domain_type;
+ typedef ICL_COMPARE_DOMAIN(Compare,DomainT) domain_compare;
 
 public:
     //==========================================================================
@@ -106,7 +107,7 @@
 template<class DomainT>
 struct value_size<icl::closed_interval<DomainT> >
 {
- static std::size_t apply(const icl::closed_interval<DomainT>& value)
+ static std::size_t apply(const icl::closed_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/concept/element_set.hpp
==============================================================================
--- sandbox/icl/boost/icl/concept/element_set.hpp (original)
+++ sandbox/icl/boost/icl/concept/element_set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -93,7 +93,7 @@
 
 template<class Type>
 inline typename enable_if<is_element_set<Type>, Type>::type&
-operator ^= (Type& object, const typename Type::element_tpye& operand)
+operator ^= (Type& object, const typename Type::element_type& operand)
 {
     return icl::flip(object, operand);
 }

Modified: sandbox/icl/boost/icl/concept/interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/concept/interval.hpp (original)
+++ sandbox/icl/boost/icl/concept/interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -107,8 +107,10 @@
 singleton(const typename interval_traits<Type>::domain_type& value)
 {
     //ASSERT: This always creates an interval with exactly one element
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(value) ));
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(value) ));
 
     return interval_traits<Type>::construct(domain_prior<Type>(value), value);
 }
@@ -118,8 +120,10 @@
 singleton(const typename interval_traits<Type>::domain_type& value)
 {
     //ASSERT: This always creates an interval with exactly one element
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(value)));
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(value)));
 
     return interval_traits<Type>::construct( domain_prior<Type>(value)
                                            , domain_next<Type>(value));
@@ -172,8 +176,10 @@
>::type
 unit_trail(const typename interval_traits<Type>::domain_type& value)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(value) ));
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(value) ));
 
     return interval_traits<Type>::construct(domain_prior<Type>(value), value);
 }
@@ -187,8 +193,10 @@
>::type
 unit_trail(const typename interval_traits<Type>::domain_type& value)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(value)));
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(value)));
 
     return interval_traits<Type>::construct( domain_prior<Type>(value)
                                            , domain_next<Type>(value));
@@ -279,15 +287,18 @@
 hull(const typename interval_traits<Type>::domain_type& left,
      const typename interval_traits<Type>::domain_type& right)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
     if(interval_traits<Type>::domain_compare()(left,right))
     {
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(left) ));
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(left) ));
         return construct<Type>(domain_prior<Type>(left), right);
     }
     else
     {
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(right) ));
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(right) ));
         return construct<Type>(domain_prior<Type>(right), left);
     }
 }
@@ -308,16 +319,19 @@
 hull(const typename interval_traits<Type>::domain_type& left,
      const typename interval_traits<Type>::domain_type& right)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
     if(interval_traits<Type>::domain_compare()(left,right))
     {
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(left) ));
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(left) ));
         return construct<Type>( domain_prior<Type>(left)
                               , domain_next<Type>(right));
     }
     else
     {
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value >::is_less_than(right) ));
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
+ ::is_less_than(right) ));
         return construct<Type>( domain_prior<Type>(right)
                               , domain_next<Type>(left));
     }
@@ -402,8 +416,9 @@
          , typename interval_traits<Type>::domain_type>::type
 last(const Type& object)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value>
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
                                  ::is_less_than(upper(object)) ));
     return domain_prior<Type>(upper(object));
 }
@@ -413,8 +428,9 @@
                           typename interval_traits<Type>::domain_type>::type
 last(const Type& object)
 {
- typedef typename interval_traits<Type>::domain_type domain_type;
- BOOST_ASSERT((numeric_minimum<domain_type, is_numeric<domain_type>::value>
+ typedef typename interval_traits<Type>::domain_type domain_type;
+ typedef typename interval_traits<Type>::domain_compare domain_compare;
+ BOOST_ASSERT((numeric_minimum<domain_type, domain_compare, is_numeric<domain_type>::value>
                                  ::is_less_than_or(upper(object), is_right_closed(object.bounds())) ));
     return is_right_closed(object.bounds()) ?
                                   upper(object) :
@@ -531,7 +547,8 @@
 typename boost::enable_if<is_static_open<Type>, bool>::type
 is_empty(const Type& object)
 {
- return domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
+ return domain_less_equal<Type>(upper(object), lower(object) )
+ || domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
 }
 
 template<class Type>
@@ -541,7 +558,8 @@
     if(object.bounds() == interval_bounds::closed())
         return domain_less<Type>(upper(object), lower(object));
     else if(object.bounds() == interval_bounds::open())
- return domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
+ return domain_less_equal<Type>(upper(object), lower(object) )
+ || domain_less_equal<Type>(upper(object), domain_next<Type>(lower(object)));
     else
         return domain_less_equal<Type>(upper(object), lower(object));
 }
@@ -591,8 +609,8 @@
     exclusive_less(const Type& left, const Type& right)
     {
         BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right)));
- return domain_less <Type>(left.upper(), right.lower())
- || ( domain_equal<Type>(left.upper(), right.lower())
+ return domain_less <Type>(upper(left), lower(right))
+ || ( domain_equal<Type>(upper(left), lower(right))
                 && inner_bounds(left,right) != interval_bounds::open() );
     }
 
@@ -645,12 +663,12 @@
 {
     return
         (is_left_closed(super.bounds())
- ? domain_less_equal<Type>(super.lower(), element)
- : domain_less<Type>(super.lower(), element))
+ ? domain_less_equal<Type>(lower(super), element)
+ : domain_less<Type>(lower(super), element))
     &&
         (is_right_closed(super.bounds())
- ? domain_less_equal<Type>(element, super.upper())
- : domain_less<Type>(element, super.upper()));
+ ? domain_less_equal<Type>(element, upper(super))
+ : domain_less<Type>(element, upper(super)));
 }
 
 //- within ---------------------------------------------------------------------
@@ -698,8 +716,8 @@
 exclusive_less(const Type& left, const Type& right)
 {
     return icl::is_empty(left) || icl::is_empty(right)
- || domain_less<Type>(left.upper(), right.lower())
- || ( domain_equal<Type>(left.upper(), right.lower())
+ || domain_less<Type>(upper(left), lower(right))
+ || ( domain_equal<Type>(upper(left), lower(right))
             && inner_bounds(left,right) != interval_bounds::open() );
 }
 
@@ -709,7 +727,7 @@
 typename boost::enable_if<has_static_bounds<Type>, bool>::type
 lower_less(const Type& left, const Type& right)
 {
- return domain_less<Type>(left.lower(), right.lower());
+ return domain_less<Type>(lower(left), lower(right));
 }
     
 template<class Type>
@@ -724,9 +742,9 @@
 lower_less(const Type& left, const Type& right)
 {
     if(left_bounds(left,right) == interval_bounds::right_open()) //'[(' == 10
- return domain_less_equal<Type>(left.lower(), right.lower());
+ return domain_less_equal<Type>(lower(left), lower(right));
     else
- return domain_less<Type>(left.lower(), right.lower());
+ return domain_less<Type>(lower(left), lower(right));
 }
     
 
@@ -735,7 +753,7 @@
 typename boost::enable_if<has_static_bounds<Type>, bool>::type
 upper_less(const Type& left, const Type& right)
 {
- return domain_less<Type>(left.upper(), right.upper());
+ return domain_less<Type>(upper(left), upper(right));
 }
 
 template<class Type>
@@ -750,9 +768,9 @@
 upper_less(const Type& left, const Type& right)
 {
     if(right_bounds(left,right) == interval_bounds::left_open())
- return domain_less_equal<Type>(left.upper(), right.upper());
+ return domain_less_equal<Type>(upper(left), upper(right));
     else
- return domain_less<Type>(left.upper(), right.upper());
+ return domain_less<Type>(upper(left), upper(right));
 }
     
 //------------------------------------------------------------------------------
@@ -797,7 +815,7 @@
 typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
 lower_equal(const Type& left, const Type& right)
 {
- return domain_equal<Type>(left.lower(), right.lower());
+ return domain_equal<Type>(lower(left), lower(right));
 }
 
 template<class Type>
@@ -819,7 +837,7 @@
 lower_equal(const Type& left, const Type& right)
 {
     return (left.bounds().left()==right.bounds().left())
- && domain_equal<Type>(left.lower(), right.lower());
+ && domain_equal<Type>(lower(left), lower(right));
 }
 
 
@@ -828,7 +846,7 @@
 typename boost::enable_if<is_asymmetric_interval<Type>, bool>::type
 upper_equal(const Type& left, const Type& right)
 {
- return domain_equal<Type>(left.upper(), right.upper());
+ return domain_equal<Type>(upper(left), upper(right));
 }
 
 template<class Type>
@@ -850,7 +868,7 @@
 upper_equal(const Type& left, const Type& right)
 {
     return (left.bounds().right()==right.bounds().right())
- && domain_equal<Type>(left.upper(), right.upper());
+ && domain_equal<Type>(upper(left), upper(right));
 }
 
 //------------------------------------------------------------------------------
@@ -933,7 +951,7 @@
 touches(const Type& left, const Type& right)
 {
     return is_complementary(inner_bounds(left,right))
- && domain_equal<Type>(left.upper(), right.lower());
+ && domain_equal<Type>(upper(left), lower(right));
 }
 
 
@@ -1055,7 +1073,7 @@
 template<class Type>
 inline typename enable_if<is_interval<Type>,
     typename size_type_of<interval_traits<Type> >::type>::type
-iterative_size(const Type& object)
+iterative_size(const Type&)
 {
     return 2;
 }
@@ -1386,7 +1404,7 @@
     if(icl::is_empty(x1) || icl::is_empty(x2))
         return icl::identity_element<DiffT>::value();
     else if(domain_less<Type>(upper(x1), lower(x2)))
- return x2.lower() - x1.upper();
+ return lower(x2) - upper(x1);
     else if(domain_less<Type>(upper(x2), lower(x1)))
         return lower(x1) - upper(x2);
     else

Modified: sandbox/icl/boost/icl/concept/interval_associator.hpp
==============================================================================
--- sandbox/icl/boost/icl/concept/interval_associator.hpp (original)
+++ sandbox/icl/boost/icl/concept/interval_associator.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -325,6 +325,7 @@
 }
 
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op + (T, c P&) T:{S}|{M} P:{e i S}|{b p M}
 //------------------------------------------------------------------------------
@@ -339,6 +340,26 @@
     return object += operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator + (const Type& object, const OperandT& operand)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator + (Type&& object, const OperandT& operand)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op + (c P&, T) T:{S}|{M} P:{e i S'}|{b p M'}
 //------------------------------------------------------------------------------
@@ -353,6 +374,26 @@
     return object += operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator + (const OperandT& operand, const Type& object)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator + (const OperandT& operand, Type&& object)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op + (T, c P&) T:{S}|{M} P:{S}|{M}
 //------------------------------------------------------------------------------
@@ -367,6 +408,38 @@
     return object += operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator + (const Type& object, const Type& operand)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator + (Type&& object, const Type& operand)
+{
+ return boost::move(object += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator + (const Type& operand, Type&& object)
+{
+ return boost::move(object += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator + (Type&& object, Type&& operand)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
 
 //------------------------------------------------------------------------------
 //- Addition |=, |
@@ -404,6 +477,7 @@
     return object += operand;
 }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op | (T, c P&) T:{S}|{M} P:{e i S}|{b p M}
 //------------------------------------------------------------------------------
@@ -418,6 +492,26 @@
     return object += operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator | (const Type& object, const OperandT& operand)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator | (Type&& object, const OperandT& operand)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op | (T, c P&) T:{S}|{M} P:{S}|{M}
 //------------------------------------------------------------------------------
@@ -432,6 +526,26 @@
     return object += operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator | (const OperandT& operand, const Type& object)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator | (const OperandT& operand, Type&& object)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op | (T, c P&) T:{S}|{M} P:{S}|{M}
 //------------------------------------------------------------------------------
@@ -445,6 +559,39 @@
 {
     return object += operand;
 }
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator | (const Type& object, const Type& operand)
+{
+ Type temp = object;
+ return boost::move(temp += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator | (Type&& object, const Type& operand)
+{
+ return boost::move(object += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator | (const Type& operand, Type&& object)
+{
+ return boost::move(object += operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator | (Type&& object, Type&& operand)
+{
+ return boost::move(object += operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
 
 //==============================================================================
 //= Insertion<IntervalSet|IntervalSet>
@@ -458,7 +605,7 @@
 {
     typename Type::iterator prior_ = object.end();
     ICL_const_FORALL(typename OperandT, elem_, operand)
- insert(object, *elem_);
+ insert(object, prior_, *elem_);
 
     return object;
 }
@@ -560,7 +707,7 @@
     return erase(object, operand);
 }
 
-
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op - (T, c P&) T:{S}|{M} P:{e i S'}|{e i b p S' M'}
 //------------------------------------------------------------------------------
@@ -571,6 +718,24 @@
     return object -= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_right_inter_combinable<Type, OperandT>, Type>::type
+operator - (const Type& object, const OperandT& operand)
+{
+ Type temp = object;
+ return boost::move(temp -= operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_right_inter_combinable<Type, OperandT>, Type>::type
+operator - (Type&& object, const OperandT& operand)
+{
+ return boost::move(object -= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
 
 //==============================================================================
 //= Intersection<IntervalSet|IntervalSet>
@@ -611,6 +776,7 @@
     return object;
 }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op & (T, c P&) T:{S}|{M} P:{e i S'}|{e i b p S' M'} S<S' M<M' <:coarser
 //------------------------------------------------------------------------------
@@ -621,6 +787,26 @@
     return object &= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_inter_combinable<Type, OperandT>, Type>::type
+operator & (const Type& object, const OperandT& operand)
+{
+ Type temp = object;
+ return boost::move(temp &= operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_inter_combinable<Type, OperandT>, Type>::type
+operator & (Type&& object, const OperandT& operand)
+{
+ return boost::move(object &= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op & (c P&, T) T:{S}|{M} P:{e i S'}|{e i b p S' M'} S<S' M<M' <:coarser
 //------------------------------------------------------------------------------
@@ -631,6 +817,26 @@
     return object &= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_inter_combinable<Type, OperandT>, Type>::type
+operator & (const OperandT& operand, const Type& object)
+{
+ Type temp = object;
+ return boost::move(temp &= operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_inter_combinable<Type, OperandT>, Type>::type
+operator & (const OperandT& operand, Type&& object)
+{
+ return boost::move(object &= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op & (T, c T&) T:{S M}
 //------------------------------------------------------------------------------
@@ -641,6 +847,39 @@
     return object &= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator & (const Type& object, const Type& operand)
+{
+ Type temp = object;
+ return boost::move(temp &= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator & (Type&& object, const Type& operand)
+{
+ return boost::move(object &= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator & (const Type& operand, Type&& object)
+{
+ return boost::move(object &= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator & (Type&& object, Type&& operand)
+{
+ return boost::move(object &= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
 //------------------------------------------------------------------------------
 //- intersects<IntervalSet|IntervalMap>
 //------------------------------------------------------------------------------
@@ -670,7 +909,7 @@
 typename enable_if< mpl::and_< is_intra_combinable<LeftT, RightT>
                              , mpl::or_<is_total<LeftT>, is_total<RightT> > >
                   , bool>::type
-intersects(const LeftT& left, const RightT& right)
+intersects(const LeftT&, const RightT&)
 {
     return true;
 }
@@ -772,6 +1011,7 @@
     return icl::flip(object, operand);
 }
 
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op ^ (T, c P&) T:{S}|{M} P:{e i S'}|{b p M'} S<S' M<M' <:coarser
 //------------------------------------------------------------------------------
@@ -782,6 +1022,26 @@
     return object ^= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator ^ (const Type& object, const OperandT& operand)
+{
+ Type temp = object;
+ return boost::move(temp ^= operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator ^ (Type&& object, const OperandT& operand)
+{
+ return boost::move(object ^= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op ^ (c P&, T) T:{S}|{M} P:{e i S'}|{b p M'} S<S' M<M' <:coarser
 //------------------------------------------------------------------------------
@@ -792,6 +1052,26 @@
     return object ^= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator ^ (const OperandT& operand, const Type& object)
+{
+ Type temp = object;
+ return boost::move(temp ^= operand);
+}
+
+template<class Type, class OperandT>
+typename enable_if<is_binary_intra_combinable<Type, OperandT>, Type>::type
+operator ^ (const OperandT& operand, Type&& object)
+{
+ return boost::move(object ^= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
 //------------------------------------------------------------------------------
 //- T op ^ (T, c T&) T:{S M}
 //------------------------------------------------------------------------------
@@ -802,6 +1082,39 @@
     return object ^= operand;
 }
 
+#else //BOOST_NO_RVALUE_REFERENCES
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator ^ (const Type& object, const Type& operand)
+{
+ Type temp = object;
+ return boost::move(temp ^= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator ^ (Type&& object, const Type& operand)
+{
+ return boost::move(object ^= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator ^ (const Type& operand, Type&& object)
+{
+ return boost::move(object ^= operand);
+}
+
+template<class Type>
+typename enable_if<is_interval_container<Type>, Type>::type
+operator ^ (Type&& object, Type&& operand)
+{
+ return boost::move(object ^= operand);
+}
+
+#endif //BOOST_NO_RVALUE_REFERENCES
+
 //==========================================================================
 //= Element Iteration <IntervalSet|IntervalMap>
 //==========================================================================

Modified: sandbox/icl/boost/icl/concept/interval_bounds.hpp
==============================================================================
--- sandbox/icl/boost/icl/concept/interval_bounds.hpp (original)
+++ sandbox/icl/boost/icl/concept/interval_bounds.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -85,10 +85,7 @@
 shift_lower(interval_bounds decl, interval_bounds repr, const Type& low)
 {
     if(is_left_closed(decl) && !is_left_closed(repr))
- {
- BOOST_ASSERT((numeric_minimum<Type, is_numeric<Type>::value >::is_less_than(low) ));
         return icl::pred(low);
- }
     else if(!is_left_closed(decl) && is_left_closed(repr))
         return icl::succ(low);
     else
@@ -100,10 +97,7 @@
 shift_upper(interval_bounds decl, interval_bounds repr, const Type& up)
 {
     if(!is_right_closed(decl) && is_right_closed(repr))
- {
- BOOST_ASSERT((numeric_minimum<Type, is_numeric<Type>::value >::is_less_than(up) ));
         return icl::pred(up);
- }
     else if(is_right_closed(decl) && !is_right_closed(repr))
         return icl::succ(up);
     else

Modified: sandbox/icl/boost/icl/concept/interval_map.hpp
==============================================================================
--- sandbox/icl/boost/icl/concept/interval_map.hpp (original)
+++ sandbox/icl/boost/icl/concept/interval_map.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -88,7 +88,7 @@
                              , is_total<Type>
                              , is_cross_derivative<Type, CoType> >
             , bool>::type
-contains(const Type& super, const CoType& sub)
+contains(const Type&, const CoType&)
 {
     return true;
 }

Modified: sandbox/icl/boost/icl/continuous_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/continuous_interval.hpp (original)
+++ sandbox/icl/boost/icl/continuous_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -30,6 +30,7 @@
 public:
     typedef continuous_interval<DomainT,Compare> type;
     typedef DomainT domain_type;
+ typedef ICL_COMPARE_DOMAIN(Compare,DomainT) domain_compare;
     typedef typename bounded_value<DomainT>::type bounded_domain_type;
 
 public:
@@ -161,7 +162,7 @@
 template<class DomainT>
 struct value_size<icl::continuous_interval<DomainT> >
 {
- static std::size_t apply(const icl::continuous_interval<DomainT>& value)
+ static std::size_t apply(const icl::continuous_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/detail/interval_map_algo.hpp
==============================================================================
--- sandbox/icl/boost/icl/detail/interval_map_algo.hpp (original)
+++ sandbox/icl/boost/icl/detail/interval_map_algo.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -68,8 +68,8 @@
 
 template<class IntervalMapT>
 typename enable_if<is_total<IntervalMapT>, bool>::type
-contains(const IntervalMapT& container,
- const typename IntervalMapT::domain_type& key)
+contains(const IntervalMapT&,
+ const typename IntervalMapT::domain_type&)
 {
     return true;
 }
@@ -97,8 +97,8 @@
 
 template<class IntervalMapT>
 typename enable_if<is_total<IntervalMapT>, bool>::type
-contains(const IntervalMapT& container,
- const typename IntervalMapT::interval_type& sub_interval)
+contains(const IntervalMapT&,
+ const typename IntervalMapT::interval_type&)
 {
     return true;
 }
@@ -115,7 +115,7 @@
 template<class IntervalMapT, class IntervalSetT>
 typename enable_if<mpl::and_<is_total<IntervalMapT>
                             ,is_interval_set<IntervalSetT> >, bool>::type
-contains(const IntervalMapT& super_map, const IntervalSetT& sub_set)
+contains(const IntervalMapT&, const IntervalSetT&)
 {
     return true;
 }

Modified: sandbox/icl/boost/icl/discrete_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/discrete_interval.hpp (original)
+++ sandbox/icl/boost/icl/discrete_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -30,6 +30,7 @@
 public:
     typedef discrete_interval<DomainT,Compare> type;
     typedef DomainT domain_type;
+ typedef ICL_COMPARE_DOMAIN(Compare,DomainT) domain_compare;
     typedef typename bounded_value<DomainT>::type bounded_domain_type;
 
 public:
@@ -158,7 +159,7 @@
 template<class DomainT>
 struct value_size<icl::discrete_interval<DomainT> >
 {
- static std::size_t apply(const icl::discrete_interval<DomainT>& value)
+ static std::size_t apply(const icl::discrete_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/functors.hpp
==============================================================================
--- sandbox/icl/boost/icl/functors.hpp (original)
+++ sandbox/icl/boost/icl/functors.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -22,14 +22,14 @@
     template <typename Type> struct identity_based_inplace_combine
         : public std::binary_function<Type&, const Type&, void>
     {
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
+ inline static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     // ------------------------------------------------------------------------
     template <typename Type> struct unit_element_based_inplace_combine
         : public std::binary_function<Type&, const Type&, void>
     {
- static Type identity_element() { return boost::icl::unit_element<Type>::value(); }
+ inline static Type identity_element() { return boost::icl::unit_element<Type>::value(); }
     };
 
     // ------------------------------------------------------------------------
@@ -37,7 +37,7 @@
         : public identity_based_inplace_combine<Type>
     {
         typedef inplace_identity<Type> type;
- void operator()(Type& object, const Type& operand)const{}
+ void operator()(Type&, const Type&)const{}
     };
 
     template<>
@@ -49,11 +49,13 @@
         : public identity_based_inplace_combine<Type>
     {
         typedef inplace_erasure<Type> type;
+ typedef identity_based_inplace_combine<Type> base_type;
 
         void operator()(Type& object, const Type& operand)const
         {
             if(object == operand)
- object = Type();
+ //identity_element(); //JODO Old gcc-3.4.4 does not compile this
+ object = base_type::identity_element(); //<-- but this.
         }
     };
 
@@ -70,7 +72,7 @@
         void operator()(Type& object, const Type& operand)const
         { object += operand; }
 
- static void version(Type& object){}
+ static void version(Type&){}
     };
 
     template<>
@@ -98,7 +100,7 @@
         void operator()(Type& object, const Type& operand)const
         { object |= operand; }
 
- static void version(Type& object){}
+ static void version(Type&){}
     };
 
     template<>
@@ -112,8 +114,6 @@
 
         void operator()(Type& object, const Type& operand)const
         { object &= ~operand; }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -140,8 +140,6 @@
 
         void operator()(Type& object, const Type& operand)const
         { object ^= operand; }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     // ------------------------------------------------------------------------
@@ -165,8 +163,6 @@
 
         void operator()(Type& object, const Type& operand)const
         { object ^= operand; }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -180,8 +176,6 @@
 
         void operator()(Type& object, const Type& operand)const
         { insert(object,operand); }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -195,8 +189,6 @@
 
         void operator()(Type& object, const Type& operand)const
         { erase(object,operand); }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -204,14 +196,12 @@
 
     // ------------------------------------------------------------------------
     template <typename Type> struct inplace_star
- : public identity_based_inplace_combine<Type>
+ : public identity_based_inplace_combine<Type> //JODO unit_element_
     {
         typedef inplace_star<Type> type;
 
         void operator()(Type& object, const Type& operand)const
         { object *= operand; }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -219,14 +209,12 @@
 
     // ------------------------------------------------------------------------
     template <typename Type> struct inplace_slash
- : public identity_based_inplace_combine<Type>
+ : public identity_based_inplace_combine<Type> //JODO unit_element_
     {
         typedef inplace_slash<Type> type;
 
         void operator()(Type& object, const Type& operand)const
         { object /= operand; }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -243,8 +231,6 @@
             if(object < operand)
                 object = operand;
         }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -261,8 +247,6 @@
             if(object > operand)
                 object = operand;
         }
-
- static Type identity_element() { return boost::icl::identity_element<Type>::value(); }
     };
 
     template<>
@@ -340,6 +324,19 @@
     struct inverse<icl::inplace_min<Type> >
     { typedef icl::inplace_max<Type> type; };
 
+ template<class Type>
+ struct inverse<icl::inplace_identity<Type> >
+ { typedef icl::inplace_erasure<Type> type; };
+
+ // If a Functor
+ template<class Functor>
+ struct inverse
+ {
+ typedef typename
+ remove_reference<typename Functor::first_argument_type>::type argument_type;
+ typedef icl::inplace_erasure<argument_type> type;
+ };
+
 
     //--------------------------------------------------------------------------
     // Inverse inter_section functor

Modified: sandbox/icl/boost/icl/gregorian.hpp
==============================================================================
--- sandbox/icl/boost/icl/gregorian.hpp (original)
+++ sandbox/icl/boost/icl/gregorian.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -77,12 +77,12 @@
 
 
     // ------------------------------------------------------------------------
- boost::gregorian::date operator ++(boost::gregorian::date& x)
+ inline boost::gregorian::date operator ++(boost::gregorian::date& x)
     {
         return x += boost::gregorian::date::duration_type::unit();
     }
 
- boost::gregorian::date operator --(boost::gregorian::date& x)
+ inline boost::gregorian::date operator --(boost::gregorian::date& x)
     {
         return x -= boost::gregorian::date::duration_type::unit();
     }
@@ -107,12 +107,12 @@
         typedef boost::gregorian::date_duration type;
     };
 
- boost::gregorian::date_duration operator ++(boost::gregorian::date_duration& x)
+ inline boost::gregorian::date_duration operator ++(boost::gregorian::date_duration& x)
     {
         return x += boost::gregorian::date::duration_type::unit();
     }
 
- boost::gregorian::date_duration operator --(boost::gregorian::date_duration& x)
+ inline boost::gregorian::date_duration operator --(boost::gregorian::date_duration& x)
     {
         return x -= boost::gregorian::date::duration_type::unit();
     }

Modified: sandbox/icl/boost/icl/impl_config.hpp
==============================================================================
--- sandbox/icl/boost/icl/impl_config.hpp (original)
+++ sandbox/icl/boost/icl/impl_config.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,6 +1,6 @@
 /*-----------------------------------------------------------------------------+
 Author: Joachim Faulhaber
-Copyright (c) 2009-2009: Joachim Faulhaber
+Copyright (c) 2009-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,36 +10,37 @@
 #define BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225
 
 /*-----------------------------------------------------------------------------+
-You can choose an implementation for the basic set and map classes.
-Select at most ONE of the following defines
+| You can choose an implementation for the basic set and map classes. |
+| Select at most ONE of the following defines to change the default |
 +-----------------------------------------------------------------------------*/
 
-//#define ICL_USE_STD_IMPLEMENTATION
-//#define ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION
-//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION
+//#define ICL_USE_STD_IMPLEMENTATION // Default
+//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION // Boost.Container
+// ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION // No longer available
 
 /*-----------------------------------------------------------------------------+
-NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map as
- implementing containers (default).
-
-ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: Choose set and map implementations
- from boost::interprocess.
-
-ICL_USE_BOOST_MOVE_IMPLEMENTATION: Move aware containers from boost::container
- (NEW) are used. Currently (January 2010) this is only experimental.
- boost::move from the boost::sandbox has to be used. This is depreciated for
- production code, as long as move aware containers are not officially
- accepted into boost.
+| NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map from |
+| your local std implementation as implementing containers (DEFAULT). |
+| Whether move semantics is available depends on the version of your local |
+| STL. |
+| |
+| ICL_USE_BOOST_MOVE_IMPLEMENTATION: |
+| Use move aware containers from boost::container. |
+| |
+| NOTE: ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: This define has been |
+| available until boost version 1.48.0 and is no longer supported. |
 +-----------------------------------------------------------------------------*/
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#define ICL_IMPL_SPACE boost::interprocess
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#define ICL_IMPL_SPACE boost::container
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# define ICL_IMPL_SPACE boost::container
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# define ICL_IMPL_SPACE std
 #else
-#define ICL_IMPL_SPACE std
+# define ICL_IMPL_SPACE std
 #endif
 
+#include <boost/move/move.hpp>
+
 #endif // BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225
 
 

Modified: sandbox/icl/boost/icl/interval_base_map.hpp
==============================================================================
--- sandbox/icl/boost/icl/interval_base_map.hpp (original)
+++ sandbox/icl/boost/icl/interval_base_map.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2012: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -193,6 +193,7 @@
     BOOST_STATIC_CONSTANT(int, fineness = 0);
 
 public:
+
     //==========================================================================
     //= Construct, copy, destruct
     //==========================================================================
@@ -214,13 +215,37 @@
         BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
     }
 
- /** Assignment operator */
+ /** Copy assignment operator */
     interval_base_map& operator = (const interval_base_map& src)
     {
         this->_map = src._map;
         return *this;
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /** Move constructor */
+ interval_base_map(interval_base_map&& src): _map(boost::move(src._map))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<CodomainT>));
+ BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
+ }
+
+ /** Move assignment operator */
+ interval_base_map& operator = (interval_base_map&& src)
+ {
+ this->_map = boost::move(src._map);
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     /** swap the content of containers */
     void swap(interval_base_map& object) { _map.swap(object._map); }
 

Modified: sandbox/icl/boost/icl/interval_base_set.hpp
==============================================================================
--- sandbox/icl/boost/icl/interval_base_set.hpp (original)
+++ sandbox/icl/boost/icl/interval_base_set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -11,12 +11,12 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/set.hpp>
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/set.hpp>
-#else
-#include <set>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <set>
+#else // Default for implementing containers
+# include <set>
 #endif
 
 #include <limits>
@@ -162,7 +162,11 @@
     interval_base_set(){}
 
     /** Copy constructor */
- interval_base_set(const interval_base_set& src): _set(src._set){}
+ interval_base_set(const interval_base_set& src): _set(src._set)
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ }
 
     /** Assignment operator */
     interval_base_set& operator = (const interval_base_set& src)
@@ -171,6 +175,28 @@
         return *this;
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /** Move constructor */
+ interval_base_set(interval_base_set&& src): _set(boost::move(src._set))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ }
+
+ /** Move assignment operator */
+ interval_base_set& operator = (interval_base_set&& src)
+ {
+ this->_set = boost::move(src._set);
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     /** swap the content of containers */
     void swap(interval_base_set& operand) { _set.swap(operand._set); }
 

Modified: sandbox/icl/boost/icl/interval_map.hpp
==============================================================================
--- sandbox/icl/boost/icl/interval_map.hpp (original)
+++ sandbox/icl/boost/icl/interval_map.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2008-2009: Joachim Faulhaber
+Copyright (c) 2008-2012: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -72,12 +72,13 @@
     //==========================================================================
     //= Construct, copy, destruct
     //==========================================================================
+
     /// Default constructor for the empty object
     interval_map(): base_type() {}
+
     /// Copy constructor
     interval_map(const interval_map& src): base_type(src) {}
 
-
     /// Copy constructor for base_type
     template<class SubType>
     explicit interval_map
@@ -91,6 +92,7 @@
     explicit interval_map(const value_type& value_pair): base_type()
     { this->add(value_pair); }
 
+
     /// Assignment operator
     template<class SubType>
     interval_map& operator =
@@ -106,12 +108,31 @@
         typedef interval_base_map<SubType,DomainT,CodomainT,
                                   Traits,Compare,Combine,Section,Interval,Alloc> base_map_type;
         this->clear();
- // Can be implemented via _map.insert: Interval joining not necessary.
         iterator prior_ = this->_map.end();
         ICL_const_FORALL(typename base_map_type, it_, src)
             prior_ = this->add(prior_, *it_);
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ interval_map(interval_map&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ interval_map& operator = (interval_map&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
 private:
     // Private functions that shall be accessible by the baseclass:
     friend class

Modified: sandbox/icl/boost/icl/interval_set.hpp
==============================================================================
--- sandbox/icl/boost/icl/interval_set.hpp (original)
+++ sandbox/icl/boost/icl/interval_set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -93,6 +93,7 @@
     //==========================================================================
     /// Default constructor for the empty object
     interval_set(): base_type() {}
+
     /// Copy constructor
     interval_set(const interval_set& src): base_type(src) {}
 
@@ -107,6 +108,7 @@
     /// Constructor for a single element
     explicit interval_set(const domain_type& value): base_type()
     { this->add(interval_type(value)); }
+
     /// Constructor for a single interval
     explicit interval_set(const interval_type& itv): base_type()
     {
@@ -135,6 +137,24 @@
             prior_ = this->add(prior_, *it_);
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ interval_set(interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ interval_set& operator = (interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
 
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: sandbox/icl/boost/icl/left_open_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/left_open_interval.hpp (original)
+++ sandbox/icl/boost/icl/left_open_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -49,7 +49,8 @@
         // Only for discrete types this ctor creates an interval containing
         // a single element only.
         BOOST_STATIC_ASSERT((icl::is_discrete<DomainT>::value));
- BOOST_ASSERT((numeric_minimum<DomainT, is_numeric<DomainT>::value >::is_less_than(val) ));
+ BOOST_ASSERT((numeric_minimum<DomainT, domain_compare, is_numeric<DomainT>::value >
+ ::is_less_than(val) ));
     }
 
     /** Interval from <tt>low</tt> to <tt>up</tt> with bounds <tt>bounds</tt> */
@@ -108,7 +109,7 @@
 template<class DomainT, ICL_COMPARE Compare>
 struct value_size<icl::left_open_interval<DomainT,Compare> >
 {
- static std::size_t apply(const icl::left_open_interval<DomainT>& value)
+ static std::size_t apply(const icl::left_open_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/map.hpp
==============================================================================
--- sandbox/icl/boost/icl/map.hpp (original)
+++ sandbox/icl/boost/icl/map.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,17 +10,15 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/map.hpp>
-#include <boost/interprocess/containers/set.hpp>
-#include <boost/interprocess/containers/flat_set.hpp> //FLAS
-#include <boost/interprocess/containers/flat_map.hpp> //FLAS
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/map.hpp>
-#include <boost/container/set.hpp>
-#else
-#include <map>
-#include <set>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/map.hpp>
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <map>
+# include <set>
+#else // Default for implementing containers
+# include <map>
+# include <set>
 #endif
 
 #include <string>
@@ -194,7 +192,34 @@
         insert(key_value_pair);
     }
 
- map& operator=(const map& src) { base_type::operator=(src); return *this; }
+ map& operator = (map& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ map(map&& src)
+ : base_type(boost::move(src))
+ {
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
+ BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept<CodomainT>));
+ BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>));
+ }
+
+ map& operator = (map&& src)
+ {
+ base_type::operator=(src);
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     void swap(map& src) { base_type::swap(src); }
 
     //==========================================================================
@@ -310,6 +335,14 @@
             return base_type::insert(prior, value_pair);
     }
 
+ template<class Iterator>
+ iterator insert(Iterator first, Iterator last)
+ {
+ iterator prior = end(), it = first;
+ while(it != last)
+ prior = this->insert(prior, *it++);
+ }
+
     /** With <tt>key_value_pair = (k,v)</tt> set value \c v for key \c k */
     map& set(const element_type& key_value_pair)
     {

Modified: sandbox/icl/boost/icl/open_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/open_interval.hpp (original)
+++ sandbox/icl/boost/icl/open_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -24,6 +24,7 @@
 public:
     typedef open_interval<DomainT,Compare> type;
     typedef DomainT domain_type;
+ typedef ICL_COMPARE_DOMAIN(Compare,DomainT) domain_compare;
 
 public:
     //==========================================================================
@@ -48,7 +49,8 @@
         // Only for discrete types this ctor creates an interval containing
         // a single element only.
         BOOST_STATIC_ASSERT((icl::is_discrete<DomainT>::value));
- BOOST_ASSERT((numeric_minimum<DomainT, is_numeric<DomainT>::value >::is_less_than(val) ));
+ BOOST_ASSERT((numeric_minimum<DomainT, domain_compare, is_numeric<DomainT>::value >
+ ::is_less_than(val) ));
     }
 
     /** Interval from <tt>low</tt> to <tt>up</tt> with bounds <tt>bounds</tt> */
@@ -107,7 +109,7 @@
 template<class DomainT, ICL_COMPARE Compare>
 struct value_size<icl::open_interval<DomainT,Compare> >
 {
- static std::size_t apply(const icl::open_interval<DomainT>& value)
+ static std::size_t apply(const icl::open_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/ptime.hpp
==============================================================================
--- sandbox/icl/boost/icl/ptime.hpp (original)
+++ sandbox/icl/boost/icl/ptime.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -76,12 +76,12 @@
     };
 
     // ------------------------------------------------------------------------
- boost::posix_time::ptime operator ++(boost::posix_time::ptime& x)
+ inline boost::posix_time::ptime operator ++(boost::posix_time::ptime& x)
     {
         return x += boost::posix_time::ptime::time_duration_type::unit();
     }
 
- boost::posix_time::ptime operator --(boost::posix_time::ptime& x)
+ inline boost::posix_time::ptime operator --(boost::posix_time::ptime& x)
     {
         return x -= boost::posix_time::ptime::time_duration_type::unit();
     }
@@ -106,12 +106,12 @@
         typedef boost::posix_time::time_duration type;
     };
 
- boost::posix_time::time_duration operator ++(boost::posix_time::time_duration& x)
+ inline boost::posix_time::time_duration operator ++(boost::posix_time::time_duration& x)
     {
         return x += boost::posix_time::ptime::time_duration_type::unit();
     }
 
- boost::posix_time::time_duration operator --(boost::posix_time::time_duration& x)
+ inline boost::posix_time::time_duration operator --(boost::posix_time::time_duration& x)
     {
         return x -= boost::posix_time::ptime::time_duration_type::unit();
     }

Modified: sandbox/icl/boost/icl/right_open_interval.hpp
==============================================================================
--- sandbox/icl/boost/icl/right_open_interval.hpp (original)
+++ sandbox/icl/boost/icl/right_open_interval.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -108,7 +108,7 @@
 template<class DomainT, ICL_COMPARE Compare>
 struct value_size<icl::right_open_interval<DomainT,Compare> >
 {
- static std::size_t apply(const icl::right_open_interval<DomainT>& value)
+ static std::size_t apply(const icl::right_open_interval<DomainT>&)
     { return 2; }
 };
 

Modified: sandbox/icl/boost/icl/separate_interval_set.hpp
==============================================================================
--- sandbox/icl/boost/icl/separate_interval_set.hpp (original)
+++ sandbox/icl/boost/icl/separate_interval_set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -82,7 +82,6 @@
     /// const_iterator for iteration over intervals
     typedef typename ImplSetT::const_iterator const_iterator;
 
-
     enum { fineness = 2 };
 
 public:
@@ -124,6 +123,24 @@
         this->_set.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ separate_interval_set(separate_interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ separate_interval_set& operator = (separate_interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
 
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: sandbox/icl/boost/icl/set.hpp
==============================================================================
--- sandbox/icl/boost/icl/set.hpp (original)
+++ sandbox/icl/boost/icl/set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 2007-2011: Joachim Faulhaber
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
       (See accompanying file LICENCE.txt or copy at
@@ -10,12 +10,12 @@
 
 #include <boost/icl/impl_config.hpp>
 
-#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
-#include <boost/interprocess/containers/set.hpp>
-#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
-#include <boost/container/set.hpp>
+#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION)
+# include <boost/container/set.hpp>
+#elif defined(ICL_USE_STD_IMPLEMENTATION)
+# include <set>
 #else
-#include <set>
+# include <set>
 #endif
 
 #include <boost/icl/concept/associative_element_container.hpp>

Modified: sandbox/icl/boost/icl/split_interval_map.hpp
==============================================================================
--- sandbox/icl/boost/icl/split_interval_map.hpp (original)
+++ sandbox/icl/boost/icl/split_interval_map.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -1,5 +1,5 @@
 /*-----------------------------------------------------------------------------+
-Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 2007-2012: Joachim Faulhaber
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
    Distributed under the Boost Software License, Version 1.0.
@@ -68,6 +68,7 @@
     //==========================================================================
     /// Default constructor for the empty object
     split_interval_map(): base_type() {}
+
     /// Copy constructor
     split_interval_map(const split_interval_map& src): base_type(src) {}
 
@@ -77,7 +78,7 @@
     explicit split_interval_map(const value_type& value_pair): base_type()
     { this->add(value_pair); }
 
- /// Assignment operator
+ /// Copy assignment operator
     template<class SubType>
     split_interval_map& operator =
         (const interval_base_map<SubType,DomainT,CodomainT,
@@ -93,6 +94,26 @@
         this->_map.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ split_interval_map(split_interval_map&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ split_interval_map& operator = (split_interval_map&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
 private:
     // Private functions that shall be accessible by the baseclass:
     friend class

Modified: sandbox/icl/boost/icl/split_interval_set.hpp
==============================================================================
--- sandbox/icl/boost/icl/split_interval_set.hpp (original)
+++ sandbox/icl/boost/icl/split_interval_set.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -118,6 +118,25 @@
         this->_set.insert(src.begin(), src.end());
     }
 
+# ifndef BOOST_NO_RVALUE_REFERENCES
+ //==========================================================================
+ //= Move semantics
+ //==========================================================================
+
+ /// Move constructor
+ split_interval_set(split_interval_set&& src)
+ : base_type(boost::move(src))
+ {}
+
+ /// Move assignment operator
+ split_interval_set& operator = (split_interval_set&& src)
+ {
+ base_type::operator=(boost::move(src));
+ return *this;
+ }
+ //==========================================================================
+# endif // BOOST_NO_RVALUE_REFERENCES
+
     
 private:
     // Private functions that shall be accessible by the baseclass:

Modified: sandbox/icl/boost/icl/type_traits/infinity.hpp
==============================================================================
--- sandbox/icl/boost/icl/type_traits/infinity.hpp (original)
+++ sandbox/icl/boost/icl/type_traits/infinity.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -12,6 +12,8 @@
 #include <boost/static_assert.hpp>
 #include <boost/type_traits/ice.hpp>
 #include <boost/icl/type_traits/is_numeric.hpp>
+#include <boost/icl/type_traits/rep_type_of.hpp>
+#include <boost/icl/type_traits/size_type_of.hpp>
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/if.hpp>
 

Modified: sandbox/icl/boost/icl/type_traits/is_discrete.hpp
==============================================================================
--- sandbox/icl/boost/icl/type_traits/is_discrete.hpp (original)
+++ sandbox/icl/boost/icl/type_traits/is_discrete.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -50,7 +50,6 @@
                          <
                              has_rep_type<Type>
                            , is_discrete<typename rep_type_of<Type>::type>
- //CL , is_non_floating_point<typename rep_type_of<Type>::type>
>
>
>::value

Modified: sandbox/icl/boost/icl/type_traits/is_numeric.hpp
==============================================================================
--- sandbox/icl/boost/icl/type_traits/is_numeric.hpp (original)
+++ sandbox/icl/boost/icl/type_traits/is_numeric.hpp 2012-07-22 18:16:26 EDT (Sun, 22 Jul 2012)
@@ -10,6 +10,7 @@
 
 #include <limits>
 #include <complex>
+#include <functional>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/type_traits/ice.hpp>
 #include <boost/type_traits/is_integral.hpp>
@@ -54,20 +55,28 @@
 };
 
 //--------------------------------------------------------------------------
-template<class Type, bool Enable = false> struct numeric_minimum;
-
-template<class Type>
-struct numeric_minimum<Type, false>
+template<class Type, class Compare, bool Enable = false>
+struct numeric_minimum
 {
     static bool is_less_than(Type){ return true; }
     static bool is_less_than_or(Type, bool){ return true; }
 };
 
 template<class Type>
-struct numeric_minimum<Type, true>
+struct numeric_minimum<Type, std::less<Type>, true>
+{
+ static bool is_less_than(Type value)
+ { return std::less<Type>()((std::numeric_limits<Type>::min)(), value); }
+
+ static bool is_less_than_or(Type value, bool cond)
+ { return cond || is_less_than(value); }
+};
+
+template<class Type>
+struct numeric_minimum<Type, std::greater<Type>, true>
 {
     static bool is_less_than(Type value)
- { return (std::numeric_limits<Type>::min)() < value; }
+ { return std::greater<Type>()((std::numeric_limits<Type>::max)(), value); }
 
     static bool is_less_than_or(Type value, bool cond)
     { return cond || is_less_than(value); }


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