$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r65405 - in sandbox/concept_traits: boost boost/concept_traits boost/concept_traits/mpl boost/concept_traits/operator boost/concept_traits/operator/detail boost/concept_traits/type_traits doc doc/html doc/src doc/src/images doc/src/images/callouts libs libs/concept_traits libs/concept_traits/doc libs/concept_traits/example libs/concept_traits/test
From: vicente.botet_at_[hidden]
Date: 2010-09-12 23:22:17
Author: viboes
Date: 2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
New Revision: 65405
URL: http://svn.boost.org/trac/boost/changeset/65405
Log:
upload old version of Concept traits  
Added:
   sandbox/concept_traits/boost/
   sandbox/concept_traits/boost/concept_traits/
   sandbox/concept_traits/boost/concept_traits/config.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/mpl/
   sandbox/concept_traits/boost/concept_traits/mpl/eval.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/mpl/eval_args.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/
   sandbox/concept_traits/boost/concept_traits/operator/detail/
   sandbox/concept_traits/boost/concept_traits/operator/detail/binop.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_assignment_op_impl.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_binop.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_compare_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_copy_constructor_impl.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_default_constructor_impl.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_function_call_op_impl.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_and_arithmetic_or_enum.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_class_or_union.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_object_pointers.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_pointers.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_integral_or_enum.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_const.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_void.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_and_not_array_or_member_function_pointer_and_same_type.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_pointer.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/operator_common.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/plus_minus_binop_prefilter.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/unop.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/detail/unop2.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_address_of_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_assignment_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_not_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_comma_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_copy_constructor.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_default_constructor.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_dereference_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_divide_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_divide_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_equal_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_function_call_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_greater_equal_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_greater_than_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_less_equal_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_less_than_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_logical_and_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_logical_not_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_logical_or_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_member_access_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_minus_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_minus_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_modulus_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_modulus_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_multiply_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_multiply_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_not_equal_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_plus_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_plus_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_pointer_to_member_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_post_decrement_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_post_increment_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_pre_decrement_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_pre_increment_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_assign_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_subscript_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_unary_minus_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/has_unary_plus_op.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator/operator_traits_TBR.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/operator_traits.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/
   sandbox/concept_traits/boost/concept_traits/type_traits/has_member.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/has_member_class_template.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/has_member_function.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/has_member_type.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/has_static_member.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/member_type.hpp   (contents, props changed)
   sandbox/concept_traits/boost/concept_traits/type_traits/pointer_to_member_function.hpp   (contents, props changed)
   sandbox/concept_traits/doc/
   sandbox/concept_traits/doc/html/
   sandbox/concept_traits/doc/html/boostbook.css   (contents, props changed)
   sandbox/concept_traits/doc/html/reference.css   (contents, props changed)
   sandbox/concept_traits/doc/src/
   sandbox/concept_traits/doc/src/images/
   sandbox/concept_traits/doc/src/images/alert.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/blank.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/
   sandbox/concept_traits/doc/src/images/callouts/1.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/10.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/11.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/12.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/13.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/14.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/15.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/2.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/3.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/4.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/5.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/6.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/7.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/8.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/callouts/9.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/caution.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/draft.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/home.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/important.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/next.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/next_disabled.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/note.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/prev.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/prev_disabled.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/smiley.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/tip.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/toc-blank.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/toc-minus.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/toc-plus.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/up.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/up_disabled.png   (contents, props changed)
   sandbox/concept_traits/doc/src/images/warning.png   (contents, props changed)
   sandbox/concept_traits/libs/
   sandbox/concept_traits/libs/concept_traits/
   sandbox/concept_traits/libs/concept_traits/doc/
   sandbox/concept_traits/libs/concept_traits/example/
   sandbox/concept_traits/libs/concept_traits/test/
Added: sandbox/concept_traits/boost/concept_traits/config.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/config.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,40 @@
+
+//  (C) Copyright Terje Slettebø and Tobias Schwinger 2004
+//  Use, modification and distribution are subject to the Boost Software 
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_CT_CONFIG_HPP_INCLUDED
+#define BOOST_CT_CONFIG_HPP_INCLUDED
+
+#include <cstddef>
+#include "boost/config.hpp"
+
+#define BOOST_CT_COMPILER_WITH_AT_LEAST_VERSION(compiler,ver) \
+  (compiler >= ver)
+
+#define BOOST_CT_COMPILER_BELOW_VERSION(compiler,ver) \
+  ((compiler != 0) && (compiler < ver))
+
+#define BOOST_CT_COMPILER_VERSIONS(compiler,min_ver,max_ver) \
+  ((compiler != 0) && ((compiler >= min_ver) && (compiler <= max_ver)))
+
+#if defined(BOOST_MSVC) \
+|| (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+#
+#   define BOOST_CT_ELLIPSIS_DECL __cdecl
+#else
+#   define BOOST_CT_ELLIPSIS_DECL /**/
+#endif
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ || defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+ || BOOST_CT_COMPILER_BELOW_VERSION(__BORLANDC__,0x600)
+ || defined(__IBMCPP__)
+ || defined(__DMC__)
+#
+#   define BOOST_CT_NO_UNBOUNDED_ARRAYS
+#endif
+
+#endif // ndef BOOST_CT_CONFIG_HPP_INCLUDED
+
Added: sandbox/concept_traits/boost/concept_traits/mpl/eval.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/mpl/eval.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,189 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_MPL_EXT_EVAL_HPP
+#define BOOST_CT_MPL_EXT_EVAL_HPP
+
+namespace boost {
+namespace mpl {
+
+///////////////////////////////////////////////////////////////////////////////
+// eval
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct eval;
+
+template<
+  template<
+    class
+  > class F,
+  class P1
+>
+struct eval<F<P1> > : F<
+  typename P1::type
+> {};
+
+template<
+  template<
+    class,
+    class
+  > class F,
+  class P1,
+  class P2
+>
+struct eval<F<P1,P2> > : F<
+  typename P1::type,
+  typename P2::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3
+>
+struct eval<F<P1,P2,P3> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4
+>
+struct eval<F<P1,P2,P3,P4> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type,
+  typename P4::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5
+>
+struct eval<F<P1,P2,P3,P4,P5> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type,
+  typename P4::type,
+  typename P5::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5,
+  class P6
+>
+struct eval<F<P1,P2,P3,P4,P5,P6> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type,
+  typename P4::type,
+  typename P5::type,
+  typename P6::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5,
+  class P6,
+  class P7
+>
+struct eval<F<P1,P2,P3,P4,P5,P6,P7> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type,
+  typename P4::type,
+  typename P5::type,
+  typename P6::type,
+  typename P7::type
+> {};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class,
+    class,
+    class,
+    class,
+    class> class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5,
+  class P6,
+  class P7,
+  class P8
+>
+struct eval<F<P1,P2,P3,P4,P5,P6,P7,P8> > : F<
+  typename P1::type,
+  typename P2::type,
+  typename P3::type,
+  typename P4::type,
+  typename P5::type,
+  typename P6::type,
+  typename P7::type,
+  typename P8::type
+> {};
+
+} // namespace mpl
+} // namespace boost
+
+#endif // BOOST_CT_MPL_EXT_EVAL_HPP
Added: sandbox/concept_traits/boost/concept_traits/mpl/eval_args.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/mpl/eval_args.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,121 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_MPL_EXT_EVAL_ARGS_HPP
+#define BOOST_CT_MPL_EXT_EVAL_ARGS_HPP
+
+namespace boost {
+namespace mpl {
+
+///////////////////////////////////////////////////////////////////////////////
+// eval_args
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct eval_args;
+
+template<
+  template<
+    class
+  > class F,
+  class P1
+>
+struct eval_args<F<P1> >
+{
+  typedef F<
+    typename P1::type
+  > type;
+};
+
+template<
+  template<
+    class,
+    class
+  > class F,
+  class P1,
+  class P2
+>
+struct eval_args<F<P1,P2> >
+{
+  typedef F<
+    typename P1::type,
+    typename P2::type
+  > type;
+};
+
+template<
+  template<
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3
+>
+struct eval_args<F<P1,P2,P3> >
+{
+  typedef F<
+    typename P1::type,
+    typename P2::type,
+    typename P3::type
+  > type;
+};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4
+>
+struct eval_args<F<P1,P2,P3,P4> >
+{
+  typedef F<
+    typename P1::type,
+    typename P2::type,
+    typename P3::type,
+    typename P4::type
+  > type;
+};
+
+template<
+  template<
+    class,
+    class,
+    class,
+    class,
+    class
+  > class F,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5
+>
+struct eval_args<F<P1,P2,P3,P4,P5> >
+{
+  typedef F<
+    typename P1::type,
+    typename P2::type,
+    typename P3::type,
+    typename P4::type,
+    typename P5::type
+  > type;
+};
+
+} // namespace mpl
+} // namespace boost
+
+#endif // BOOST_CT_MPL_EXT_EVAL_ARGS_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/binop.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/binop.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_BINOP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_BINOP_HPP
+
+#include <boost/concept_traits/operator/detail/operator_common.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(name,op)\
+namespace detail {\
+namespace op_test_ns {\
+no_match_type operator op(const proxy &,const proxy &);\
+\
+template<class T,class U>\
+struct name\
+{\
+  static T t;\
+  static U u;\
+\
+  typedef name type;\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(op_test_ns::op_test(t op u))==1);\
+};\
+} /* namespace op_test_ns */\
+template<class T,class U>\
+struct name : op_test_ns::name<T,U> {};\
+} /* namespace detail */
+
+#endif // BOOST_CT_OPERATOR_DETAIL_BINOP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_EITHER_IS_CLASS_OR_UNION_AND_NOT_VOID_HPP
+#define BOOST_CT_OPERATOR_DETAIL_EITHER_IS_CLASS_OR_UNION_AND_NOT_VOID_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_void.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// either_is_class_or_union_and_not_void
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct either_is_class_or_union_and_not_void :
+  mpl::and_<
+    mpl::or_<
+      is_class_or_union_<typename remove_reference<T>::type>,
+      is_class_or_union_<typename remove_reference<U>::type>
+    >,
+    is_not_void<T>,
+    is_not_void<U>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_EITHER_IS_CLASS_OR_UNION_AND_NOT_VOID_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_assignment_op_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_assignment_op_impl.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_ASSIGNMENT_OP_IMPL_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_ASSIGNMENT_OP_IMPL_HPP
+
+#include <boost/concept_check.hpp>
+
+namespace boost {
+namespace detail {
+
+// Assignable requires more than an accessible assignment operator, so it can't be used here
+
+template<class T>
+struct AssignmentOperatorConcept
+{
+  void constraints()
+  {
+    T u=t;
+  }
+
+  static T t;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// has_assignment_op_impl
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_assignment_op_impl : mpl::true_
+{
+//  BOOST_CLASS_REQUIRE(T,::boost::detail,AssignmentOperatorConcept); *** Problem with MSVC 7.1
+};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_ASSIGNMENT_OP_IMPL_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_ASSIGN_BINOP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_ASSIGN_BINOP_HPP
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_assign_binop
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_bitwise_assign_binop :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_integral<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_ASSIGN_BINOP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_binop.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_bitwise_binop.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_BINOP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_BINOP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_binop
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_bitwise_binop :
+  mpl::or_<
+    mpl::and_<
+      detail::is_integral_or_enum<typename remove_reference<T>::type>,
+      detail::is_integral_or_enum<typename remove_reference<U>::type>
+    >,
+    detail::either_is_class_or_union_and_not_void<T,U>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_BITWISE_BINOP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_compare_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_compare_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_COMPARE_OP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_COMPARE_OP_HPP
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_compare_op
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_compare_op :
+  mpl::or_<
+    mpl::and_<
+      detail::is_arithmetic_or_enum<typename remove_reference<T>::type>,
+      detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+    >,
+    mpl::and_<
+      mpl::and_<
+        mpl::or_<
+          is_array<typename remove_reference<T>::type>,
+          is_pointer<typename remove_reference<T>::type>
+        >,
+        mpl::or_<
+          is_array<typename remove_reference<U>::type>,
+          is_pointer<typename remove_reference<U>::type>
+        >
+      >,
+      is_same<
+        typename remove_cv<typename remove_bounds<typename remove_pointer<typename remove_reference<T>::type>::type>::type>::type,
+        typename remove_cv<typename remove_bounds<typename remove_pointer<typename remove_reference<U>::type>::type>::type>::type
+      >
+    >,
+    mpl::and_<
+      is_function<typename remove_reference<T>::type>,
+      is_same<
+        typename remove_cv<typename remove_reference<T>::type>::type,
+        typename remove_cv<typename remove_reference<U>::type>::type
+      >
+    >,
+    detail::either_is_class_or_union_and_not_void<T,U>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_COMPARE_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_copy_constructor_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_copy_constructor_impl.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_COPY_CONSTRUCTOR_IMPL_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_COPY_CONSTRUCTOR_IMPL_HPP
+
+//#include <boost/concept_check.hpp>
+#include <boost/concept_traits/std/detail/concept_check.hpp> // *** Modified concept_check.hpp, due to too strict CopyConstructibleConcept
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_copy_constructor_impl
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_copy_constructor_impl : mpl::true_
+{
+//  BOOST_CLASS_REQUIRE(T,boost,CopyConstructibleConcept); *** Problem with MSVC 7.1
+};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_COPY_CONSTRUCTOR_IMPL_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_default_constructor_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_default_constructor_impl.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_DEFAULT_CONSTRUCTOR_IMPL_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_DEFAULT_CONSTRUCTOR_IMPL_HPP
+
+#include <boost/concept_check.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_default_constructor_impl
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct has_default_constructor_impl : mpl::true_
+{
+  BOOST_CLASS_REQUIRE(T,boost,DefaultConstructibleConcept);
+};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_DEFAULT_CONSTRUCTOR_IMPL_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_function_call_op_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_function_call_op_impl.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,117 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_FUNCTION_CALL_OP_IMPL_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_FUNCTION_CALL_OP_IMPL_HPP
+
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/function_traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/eval.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// function_arity
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct function_arity :
+  mpl::int_<function_traits<T>::arity> {};
+
+///////////////////////////////////////////////////////////////////////////////
+// is_function_and_arity_is
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,int Arity>
+struct is_function_and_arity_is :
+  mpl::and_<
+    is_function<T>,
+    mpl::equal_to<
+      function_arity<T>,
+      mpl::int_<Arity>
+    >
+  > {};
+
+///////////////////////////////////////////////////////////////////////////////
+// function_arg_type
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,int Arg>
+struct function_arg_type;
+
+template<class T>
+struct function_arg_type<T,1> :
+  mpl::identity<typename function_traits<T>::arg1_type> {};
+
+template<class T>
+struct function_arg_type<T,2> :
+  mpl::identity<typename function_traits<T>::arg2_type> {};
+
+template<class T>
+struct function_arg_type<T,3> :
+  mpl::identity<typename function_traits<T>::arg3_type> {};
+
+template<class T>
+struct function_arg_type<T,4> :
+  mpl::identity<typename function_traits<T>::arg4_type> {};
+
+template<class T>
+struct function_arg_type<T,5> :
+  mpl::identity<typename function_traits<T>::arg5_type> {};
+
+template<class T>
+struct function_arg_type<T,6> :
+  mpl::identity<typename function_traits<T>::arg6_type> {};
+
+template<class T>
+struct function_arg_type<T,7> :
+  mpl::identity<typename function_traits<T>::arg7_type> {};
+
+template<class T>
+struct function_arg_type<T,8> :
+  mpl::identity<typename function_traits<T>::arg8_type> {};
+
+template<class T>
+struct function_arg_type<T,9> :
+  mpl::identity<typename function_traits<T>::arg9_type> {};
+
+template<class T>
+struct function_arg_type<T,10> :
+  mpl::identity<typename function_traits<T>::arg10_type> {};
+
+///////////////////////////////////////////////////////////////////////////////
+// function_result_type
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct function_result_type :
+  mpl::identity<typename function_traits<T>::result_type> {};
+
+///////////////////////////////////////////////////////////////////////////////
+// is_arg_convertible_to_parameter
+///////////////////////////////////////////////////////////////////////////////
+
+template<class F,class P,int Arg>
+struct is_arg_convertible_to_parameter :
+  mpl::eval<
+    is_convertible<
+      mpl::identity<P>,
+      detail::function_arg_type<typename remove_reference<F>::type,Arg>
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_FUNCTION_CALL_OP_IMPL_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_shift_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_shift_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_integral<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/has_shift_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_OP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_shift_op
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_shift_op :
+  mpl::or_<
+    mpl::and_<
+      detail::is_integral_or_enum<typename remove_reference<T>::type>,
+      detail::is_integral_or_enum<typename remove_reference<U>::type>
+    >,
+    detail::either_is_class_or_union_and_not_void<T,U>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_HAS_SHIFT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_and_arithmetic_or_enum.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_and_arithmetic_or_enum.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,35 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_AND_ARITHMETIC_OR_ENUM_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_AND_ARITHMETIC_OR_ENUM_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_arithmetic_and_arithmetic_or_enum
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct is_arithmetic_and_arithmetic_or_enum :
+  mpl::and_<
+    is_arithmetic<typename remove_reference<T>::type>,
+    detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_AND_ARITHMETIC_OR_ENUM_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_OR_ENUM_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_OR_ENUM_HPP
+
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/mpl/or.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_arithmetic_or_enum
+///////////////////////////////////////////////////////////////////////////////
+  
+template<class T>
+struct is_arithmetic_or_enum :
+  mpl::or_<
+    is_arithmetic<T>,
+    is_enum<T>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_ARITHMETIC_OR_ENUM_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_class_or_union.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_class_or_union.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_CLASS_OR_UNION_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_CLASS_OR_UNION_HPP
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_union.hpp>
+#include <boost/mpl/or.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_class_or_union_
+//
+// There is a detail::is_class_or_union in the boost::is_enum implementation,
+// also... However, as it's not in the public interface, we can't rely on it,
+// so we define our own here, with a slightly different name to avoid collision.
+//
+// To avoid the duplication, perhaps it should be part of the public interface
+// of the type traits?
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>  
+struct is_class_or_union_ :
+  mpl::or_<
+    is_class<T>,
+    is_union<T>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_CLASS_OR_UNION_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_object_pointers.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_object_pointers.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_OBJECT_POINTERS_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_OBJECT_POINTERS_HPP
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_compatible_object_pointers
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct is_compatible_object_pointers :
+  mpl::and_<
+    detail::is_object_pointer<typename remove_reference<U>::type>,
+    mpl::or_<
+      is_same<typename remove_cv<typename remove_reference<T>::type>::type,void *>,
+      is_base_and_derived<
+        typename remove_cv<typename remove_pointer<typename remove_reference<T>::type>::type>::type,
+        typename remove_cv<typename remove_pointer<typename remove_reference<U>::type>::type>::type
+      >
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_OBJECT_POINTERS_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_pointers.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_compatible_pointers.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_POINTERS_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_POINTERS_HPP
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_compatible_object_pointers.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_compatible_pointers
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct is_compatible_pointers :
+  mpl::and_<
+    is_pointer<typename remove_reference<T>::type>,
+    mpl::or_<
+      is_same<
+        remove_cv<typename remove_reference<T>::type>,
+        remove_cv<typename remove_reference<U>::type>
+      >,
+      detail::is_compatible_object_pointers<T,U>
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_COMPATIBLE_POINTERS_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_integral_or_enum.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_integral_or_enum.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_INTEGRAL_OR_ENUM_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_INTEGRAL_OR_ENUM_HPP
+
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/mpl/or.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_integral_or_enum
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct is_integral_or_enum :
+  mpl::or_<
+    is_integral<T>,
+    is_enum<T>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_INTEGRAL_OR_ENUM_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_const.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_const.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_NOT_CONST_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_NOT_CONST_HPP
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_not_const
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct is_not_const :
+  mpl::not_<
+    is_const<typename remove_reference<T>::type>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_NOT_CONST_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_void.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_not_void.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_NOT_VOID_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_NOT_VOID_HPP
+
+#include <boost/type_traits/is_void.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_not_void
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct is_not_void :
+  mpl::not_<
+    is_void<T>
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_NOT_VOID_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_and_not_array_or_member_function_pointer_and_same_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_and_not_array_or_member_function_pointer_and_same_type.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_AND_NOT_ARRAY_OR_MEMBER_FUNCTION_POINTER_AND_SAME_TYPE_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_AND_NOT_ARRAY_OR_MEMBER_FUNCTION_POINTER_AND_SAME_TYPE_HPP
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_object_and_not_array_or_member_function_pointer_and_same_type
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct is_object_and_not_array_or_member_function_pointer_and_same_type :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        is_object<typename remove_reference<T>::type>,
+        mpl::not_<
+          is_array<typename remove_reference<T>::type>
+        >
+      >,
+      is_member_function_pointer<typename remove_reference<T>::type>
+    >,
+    is_same<
+      typename remove_cv<typename remove_reference<T>::type>::type,
+      typename remove_cv<typename remove_reference<U>::type>::type
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_AND_NOT_ARRAY_OR_MEMBER_FUNCTION_POINTER_AND_SAME_TYPE_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_pointer.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/is_object_pointer.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_POINTER_HPP
+#define BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_POINTER_HPP
+
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost {
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// is_object_pointer
+///////////////////////////////////////////////////////////////////////////////
+  
+template<class T>
+struct is_object_pointer :
+  mpl::and_<
+    is_pointer<T>,
+    mpl::not_<
+      is_function<typename remove_pointer<T>::type>
+    >
+  > {};
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_IS_OBJECT_POINTER_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/operator_common.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/operator_common.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_OPERATOR_COMMON_HPP
+#define BOOST_CT_OPERATOR_DETAIL_OPERATOR_COMMON_HPP
+
+namespace boost {
+namespace detail {
+namespace op_test_ns {
+
+struct proxy
+{
+  proxy(...);
+};
+
+struct no_match_type {};
+
+char op_test(...);
+char (&op_test(const no_match_type &))[2];
+
+} // namespace op_test_ns
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_DETAIL_OPERATOR_COMMON_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/plus_minus_binop_prefilter.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/plus_minus_binop_prefilter.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,35 @@
+
+//  (C) Copyright Terje Slettebø and Tobias Schwinger 2004
+//  Use, modification and distribution are subject to the Boost Software 
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_CT_DETAIL_PLUS_MINUS_BINOP_PREFILTER_HPP_INCLUDED
+#define BOOST_CT_DETAIL_PLUS_MINUS_BINOP_PREFILTER_HPP_INCLUDED
+
+#include "boost/concept_traits/facility/binary_type_filter_def.hpp"
+
+namespace boost { namespace detail {
+
+#define BOOST_CT_TYPE_FILTER plus_minus_binop_prefilter
+
+BOOST_CT_TF_RULESET_BEGIN
+  BOOST_CT_TF_RULE_TARGET(0) (any_type          , any_type          );
+
+// V-- change target of these rules to  1 to detect builtin operators
+  BOOST_CT_TF_RULE_PASS      (arithmetic_or_enum, arithmetic_or_enum);
+  BOOST_CT_TF_RULE_PASS      (obj_ptr_or_array  , integral_or_enum  );
+  BOOST_CT_TF_RULE_PASS      (integral_or_enum  , obj_ptr_or_array  );
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+  BOOST_CT_TF_RULE_PASS      (aggregate         , non_void          );
+  BOOST_CT_TF_RULE_PASS      (non_void          , aggregate         );
+  BOOST_CT_TF_RULE_PASS      (aggregate         , aggregate         );
+BOOST_CT_TF_RULESET_END
+
+
+} } // namespace ::boost::detail
+
+#include "boost/concept_traits/facility/type_filter_undef.hpp"
+
+#endif // BOOST_CT_DETAIL_PLUS_MINUS_BINOP_PREFILTER_HPP_INCLUDED
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/unop.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/unop.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_UNOP_HPP
+#define BOOST_CT_OPERATOR_DETAIL_UNOP_HPP
+
+#include <boost/concept_traits/operator/detail/operator_common.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(name,op)\
+namespace detail {\
+namespace op_test_ns {\
+no_match_type operator op(const proxy &);\
+\
+template<class T>\
+struct name\
+{\
+  static T t;\
+\
+  typedef name type;\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(op_test_ns::op_test(op t))==1);\
+};\
+} /* namespace op_test_ns */\
+template<class T>\
+struct name : op_test_ns::name<T> {};\
+} /* namespace detail */
+
+#endif // BOOST_CT_OPERATOR_DETAIL_UNOP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/detail/unop2.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/detail/unop2.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_DETAIL_UNOP2_HPP
+#define BOOST_CT_OPERATOR_DETAIL_UNOP2_HPP
+
+#include <boost/concept_traits/operator/detail/operator_common.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP2_TRAIT
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP2_TRAIT(name,op)\
+namespace detail {\
+namespace op_test_ns {\
+no_match_type operator op(const proxy &,int);\
+\
+template<class T>\
+struct name\
+{\
+  static T t;\
+\
+  typedef name type;\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(op_test_ns::op_test(t op))==1);\
+};\
+} /* namespace op_test_ns */\
+template<class T>\
+struct name : op_test_ns::name<T> {};\
+} /* namespace detail */
+
+#endif // BOOST_CT_OPERATOR_DETAIL_UNOP2_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_address_of_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_address_of_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_ADDRESS_OF_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_ADDRESS_OF_OP_HPP
+
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_address_of_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_address_of_op_impl, &) // Possibly auto-generated, will give always true or error
+
+template<class T>
+struct has_address_of_op :
+  mpl::and_<
+    mpl::not_<
+      mpl::or_<
+        is_enum<typename remove_reference<T>::type>,
+        is_void<T>
+      >  
+    >,
+    detail::has_address_of_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_ADDRESS_OF_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_assignment_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_assignment_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_ASSIGNMENT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_ASSIGNMENT_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_object_and_not_array_or_member_function_pointer_and_same_type.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_and_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_compatible_pointers.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/has_assignment_op_impl.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_assignment_op
+//
+// If T is a class or union with no accessible assignment operator, this trait
+// will give an error, rather than false.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U = T>
+struct has_assignment_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      detail::is_object_and_not_array_or_member_function_pointer_and_same_type<T,U>,
+      detail::is_arithmetic_and_arithmetic_or_enum<T,U>,
+      detail::is_compatible_pointers<T,U>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_assignment_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_ASSIGNMENT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_AND_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_AND_ASSIGN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_and_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_and_assign_op_impl, &=)
+
+template<class T,class U = T>
+struct has_bitwise_and_assign_op :
+  mpl::and_<
+    detail::has_bitwise_assign_binop<T,U>,
+    detail::has_bitwise_and_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_AND_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_and_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_AND_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_AND_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_binop.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_and_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_and_op_impl, &)
+
+template<class T,class U = T>
+struct has_bitwise_and_op :
+  mpl::and_<
+    detail::has_bitwise_binop<T,U>,
+    detail::has_bitwise_and_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_AND_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_not_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_not_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_NOT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_NOT_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_not_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_bitwise_not_op_impl, ~)
+
+template<class T>
+struct has_bitwise_not_op :
+  mpl::and_<
+    mpl::or_<
+      detail::is_integral_or_enum<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_bitwise_not_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_NOT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_OR_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_OR_ASSIGN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_or_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_or_assign_op_impl, |=)
+
+template<class T,class U = T>
+struct has_bitwise_or_assign_op :
+  mpl::and_<
+    detail::has_bitwise_assign_binop<T,U>,
+    detail::has_bitwise_or_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_OR_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_or_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_OR_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_OR_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_binop.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_or_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_or_op_impl, |)
+
+template<class T,class U = T>
+struct has_bitwise_or_op :
+  mpl::and_<
+    detail::has_bitwise_binop<T,U>,
+    detail::has_bitwise_or_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_OR_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_XOR_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_XOR_ASSIGN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_assign_binop.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_xor_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_xor_assign_op_impl, ^=)
+
+template<class T,class U = T>
+struct has_bitwise_xor_assign_op :
+  mpl::and_<
+    detail::has_bitwise_assign_binop<T,U>,
+    detail::has_bitwise_xor_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_XOR_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_bitwise_xor_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_BITWISE_XOR_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_BITWISE_XOR_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_bitwise_binop.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_bitwise_xor_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_bitwise_xor_op_impl, ^)
+
+template<class T,class U = T>
+struct has_bitwise_xor_op :
+  mpl::and_<
+    detail::has_bitwise_binop<T,U>,
+    detail::has_bitwise_xor_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_BITWISE_XOR_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_comma_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_comma_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_COMMA_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_COMMA_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/preprocessor/comma.hpp>
+#include <boost/concept_traits/operator/detail/is_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_comma_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_comma_op_impl, BOOST_PP_COMMA())
+
+template<class T,class U = T>
+struct has_comma_op :
+  mpl::and_<
+    detail::is_not_void<T>,
+    detail::is_not_void<U>,
+    detail::has_comma_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_COMMA_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_copy_constructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_copy_constructor.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_COPY_CONSTRUCTOR_HPP
+#define BOOST_CT_OPERATOR_HAS_COPY_CONSTRUCTOR_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_object_and_not_array_or_member_function_pointer_and_same_type.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_and_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_compatible_pointers.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/has_copy_constructor_impl.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_copy_constructor
+//
+// If T is a class or union with no accessible copy constructor, this trait
+// will give an error, rather than false.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U = T>
+struct has_copy_constructor : 
+  mpl::and_<
+    mpl::or_<
+      detail::is_object_and_not_array_or_member_function_pointer_and_same_type<T,U>,
+      detail::is_arithmetic_and_arithmetic_or_enum<T,U>,
+      detail::is_compatible_pointers<T,U>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_copy_constructor_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_COPY_CONSTRUCTOR_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_default_constructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_default_constructor.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_DEFAULT_CONSTRUCTOR_HPP
+#define BOOST_CT_OPERATOR_HAS_DEFAULT_CONSTRUCTOR_HPP
+
+#include <boost/type_traits/is_object.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/has_default_constructor_impl.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_default_constructor
+//
+// If T is a class or union with no accessible default constructor, this trait
+// will give an error, rather than false.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct has_default_constructor :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        detail::is_not_const<T>,
+        is_object<T>
+      >,
+      detail::is_class_or_union_<T>
+    >,
+    detail::has_default_constructor_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_DEFAULT_CONSTRUCTOR_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_dereference_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_dereference_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_DEREFERENCE_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_DEREFERENCE_OP_HPP
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_void.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_dereference_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_dereference_op_impl, *)
+
+template<class T>
+struct has_dereference_op :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        mpl::or_<
+          is_pointer<typename remove_reference<T>::type>,
+          is_array<typename remove_reference<T>::type>
+        >,
+        detail::is_not_void<typename remove_pointer<T>::type>
+      >,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_dereference_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_DEREFERENCE_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_divide_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_divide_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_DIVIDE_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_DIVIDE_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_divide_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_divide_assign_op_impl, /=)
+
+template<class T,class U = T>
+struct has_divide_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_divide_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_DIVIDE_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_divide_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_divide_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_DIVIDE_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_DIVIDE_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_divide_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_divide_op_impl, /)
+
+template<class T,class U = T>
+struct has_divide_op :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        detail::is_arithmetic_or_enum<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_divide_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_DIVIDE_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_equal_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_equal_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_EQUAL_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_EQUAL_OP_HPP
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_equal_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_equal_op_impl, ==)
+
+template<class T,class U = T>
+struct has_equal_op :
+  mpl::and_<
+    mpl::or_<
+      detail::has_compare_op<T,U>,
+      mpl::and_<
+        is_member_pointer<typename remove_reference<T>::type>,
+        is_same<
+          typename remove_cv<typename remove_reference<T>::type>::type,
+          typename remove_cv<typename remove_reference<U>::type>::type
+        >
+      >
+    >,
+    detail::has_equal_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_EQUAL_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_function_call_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_function_call_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,378 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_FUNCTION_CALL_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_FUNCTION_CALL_OP_HPP
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/eval.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/has_function_call_op_impl.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_function_call_op
+//
+// The function call operator has to be a member function, so it can only be
+// detected for classes and unions by specialising this trait. It gives default
+// true for these.
+///////////////////////////////////////////////////////////////////////////////
+
+template<
+  class T,class R,
+  class P1 = mpl::void_,class P2 = mpl::void_,class P3 = mpl::void_,
+  class P4 = mpl::void_,class P5 = mpl::void_,class P6 = mpl::void_,
+  class P7 = mpl::void_,class P8 = mpl::void_,class P9 = mpl::void_,
+  class P10 = mpl::void_
+>
+struct has_function_call_op :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,10>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>,
+        detail::is_arg_convertible_to_parameter<T,P6,6>,
+        mpl::and_<
+          detail::is_arg_convertible_to_parameter<T,P7,7>,
+          detail::is_arg_convertible_to_parameter<T,P8,8>,
+          detail::is_arg_convertible_to_parameter<T,P9,9>,
+          detail::is_arg_convertible_to_parameter<T,P10,10>
+        >
+      >
+    >
+  > {};
+
+template<
+  class T,class R
+>
+struct has_function_call_op<
+  T,R,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,0>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1
+>
+struct has_function_call_op<
+  T,R,
+  P1,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,1>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,2>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,3>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      detail::is_arg_convertible_to_parameter<T,P3,3>
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,mpl::void_,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<T>,
+    mpl::and_<
+      detail::is_function_and_arity_is<T,4>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4,class P5
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,P5,mpl::void_,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,5>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4,class P5,class P6
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,P5,P6,
+  mpl::void_,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,6>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>,
+        detail::is_arg_convertible_to_parameter<T,P6,6>
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4,class P5,class P6,
+  class P7
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,P5,P6,
+  P7,mpl::void_,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,7>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>,
+        detail::is_arg_convertible_to_parameter<T,P6,6>,
+        detail::is_arg_convertible_to_parameter<T,P7,7>
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4,class P5,class P6,
+  class P7,class P8
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,P5,P6,
+  P7,P8,mpl::void_,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,8>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>,
+        detail::is_arg_convertible_to_parameter<T,P6,6>,
+        mpl::and_<
+          detail::is_arg_convertible_to_parameter<T,P7,7>,
+          detail::is_arg_convertible_to_parameter<T,P8,8>
+        >
+      >
+    >
+  > {};
+
+template<
+  class T,class R,
+  class P1,class P2,class P3,
+  class P4,class P5,class P6,
+  class P7,class P8,class P9
+>
+struct has_function_call_op<
+  T,R,
+  P1,P2,P3,
+  P4,P5,P6,
+  P7,P8,P9,
+  mpl::void_
+> :
+  mpl::or_<
+    detail::is_class_or_union_<typename remove_reference<T>::type>,
+    mpl::and_<
+      detail::is_function_and_arity_is<typename remove_reference<T>::type,9>,
+      mpl::eval<
+        is_convertible<
+          mpl::identity<R>,
+          detail::function_result_type<typename remove_reference<T>::type>
+        >
+      >,
+      detail::is_arg_convertible_to_parameter<T,P1,1>,
+      detail::is_arg_convertible_to_parameter<T,P2,2>,
+      mpl::and_<
+        detail::is_arg_convertible_to_parameter<T,P3,3>,
+        detail::is_arg_convertible_to_parameter<T,P4,4>,
+        detail::is_arg_convertible_to_parameter<T,P5,5>,
+        detail::is_arg_convertible_to_parameter<T,P6,6>,
+        mpl::and_<
+          detail::is_arg_convertible_to_parameter<T,P7,7>,
+          detail::is_arg_convertible_to_parameter<T,P8,8>,
+          detail::is_arg_convertible_to_parameter<T,P9,9>
+        >
+      >
+    >
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_FUNCTION_CALL_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_greater_equal_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_greater_equal_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_GREATER_EQUAL_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_GREATER_EQUAL_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_greater_equal_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_greater_equal_op_impl, >=)
+
+template<class T,class U = T>
+struct has_greater_equal_op :
+  mpl::and_<
+    detail::has_compare_op<T,U>,
+    detail::has_greater_equal_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_GREATER_EQUAL_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_greater_than_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_greater_than_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_GREATER_THAN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_GREATER_THAN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_greater_than_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_greater_than_op_impl, >)
+
+template<class T,class U = T>
+struct has_greater_than_op :
+  mpl::and_<
+    detail::has_compare_op<T,U>,
+    detail::has_greater_than_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_GREATER_THAN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_ASSIGN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_left_shift_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_left_shift_assign_op_impl, <<=)
+
+template<class T,class U = T>
+struct has_left_shift_assign_op :
+  mpl::and_<
+    detail::has_shift_assign_op<T,U>,
+    detail::has_left_shift_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_left_shift_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_shift_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_left_shift_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_left_shift_op_impl, <<)
+
+template<class T,class U = T>
+struct has_left_shift_op :
+  mpl::and_<
+    detail::has_shift_op<T,U>,
+    detail::has_left_shift_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LEFT_SHIFT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_less_equal_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_less_equal_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LESS_EQUAL_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LESS_EQUAL_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_less_equal_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_less_equal_op_impl, <=)
+
+template<class T,class U = T>
+struct has_less_equal_op :
+  mpl::and_<
+    detail::has_compare_op<T,U>,
+    detail::has_less_equal_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LESS_EQUAL_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_less_than_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_less_than_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LESS_THAN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LESS_THAN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_less_than_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_less_than_op_impl, <)
+
+template<class T,class U = T>
+struct has_less_than_op :
+  mpl::and_<
+    detail::has_compare_op<T,U>,
+    detail::has_less_than_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LESS_THAN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_logical_and_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_logical_and_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LOGICAL_AND_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LOGICAL_AND_OP_HPP
+
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_logical_and_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_logical_and_op_impl, &&)
+
+template<class T,class U = T>
+struct has_logical_and_op :
+  mpl::and_<
+    is_object<typename remove_reference<T>::type>,
+    is_object<typename remove_reference<U>::type>,
+    detail::has_logical_and_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LOGICAL_AND_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_logical_not_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_logical_not_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,35 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LOGICAL_NOT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LOGICAL_NOT_OP_HPP
+
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_logical_not_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_logical_not_op_impl, !)
+
+template<class T>
+struct has_logical_not_op :
+  mpl::and_<
+    is_object<typename remove_reference<T>::type>,
+    detail::has_logical_not_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LOGICAL_NOT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_logical_or_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_logical_or_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_LOGICAL_OR_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_LOGICAL_OR_OP_HPP
+
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_logical_or_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_logical_or_op_impl, ||)
+
+template<class T,class U = T>
+struct has_logical_or_op :
+  mpl::and_<
+    is_object<typename remove_reference<T>::type>,
+    is_object<typename remove_reference<U>::type>,
+    detail::has_logical_or_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_LOGICAL_OR_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_member_access_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_member_access_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MEMBER_ACCESS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MEMBER_ACCESS_OP_HPP
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_member_access_op
+//
+// The member access operator has to be a member function, so it can only be
+// detected for classes and unions by specialising this trait. It gives default
+// true for these.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+struct has_member_access_op :
+  mpl::or_<
+    mpl::and_<
+      is_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_pointer<typename remove_reference<T>::type>::type>
+    >,
+    detail::is_class_or_union_<typename remove_reference<T>::type>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MEMBER_ACCESS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_minus_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_minus_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MINUS_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MINUS_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_minus_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_minus_assign_op_impl, -=)
+
+template<class T,class U = T>
+struct has_minus_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      mpl::and_<
+        detail::is_object_pointer<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_minus_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MINUS_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_minus_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_minus_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MINUS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MINUS_OP_HPP
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_minus_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_minus_op_impl, -)
+
+template<class T,class U = T>
+struct has_minus_op :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        detail::is_arithmetic_or_enum<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      mpl::and_<
+        mpl::or_<
+          is_array<typename remove_reference<T>::type>,
+          detail::is_object_pointer<typename remove_reference<T>::type>
+        >,
+        mpl::or_<
+          detail::is_integral_or_enum<typename remove_reference<U>::type>,
+          is_same<typename remove_reference<T>::type,typename remove_reference<U>::type>
+        >
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_minus_op_impl<T,U>
+  >
+ {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MINUS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_modulus_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_modulus_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MODULUS_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MODULUS_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_modulus_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_modulus_assign_op_impl, %=)
+
+template<class T,class U = T>
+struct has_modulus_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_integral<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_modulus_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MODULUS_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_modulus_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_modulus_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MODULUS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MODULUS_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_modulus_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_modulus_op_impl, %)
+
+template<class T,class U = T>
+struct has_modulus_op :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        detail::is_integral_or_enum<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_modulus_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MODULUS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_multiply_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_multiply_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MULTIPLY_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MULTIPLY_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_multiply_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_multiply_assign_op_impl, *=)
+
+template<class T,class U = T>
+struct has_multiply_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_multiply_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MULTIPLY_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_multiply_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_multiply_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_MULTIPLY_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_MULTIPLY_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_multiply_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_multiply_op_impl, *)
+
+template<class T,class U = T>
+struct has_multiply_op :
+  mpl::and_<
+    mpl::or_<
+      mpl::and_<
+        detail::is_arithmetic_or_enum<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_multiply_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_MULTIPLY_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_not_equal_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_not_equal_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_NOT_EQUAL_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_NOT_EQUAL_OP_HPP
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/has_compare_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_not_equal_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_not_equal_op_impl, !=)
+
+template<class T,class U = T>
+struct has_not_equal_op :
+  mpl::and_<
+    mpl::or_<
+      detail::has_compare_op<T,U>,
+      mpl::and_<
+        is_member_pointer<typename remove_reference<T>::type>,
+        is_same<
+          typename remove_cv<typename remove_reference<T>::type>::type,
+          typename remove_cv<typename remove_reference<U>::type>::type
+        >
+      >
+    >,
+    detail::has_not_equal_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_NOT_EQUAL_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_plus_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_plus_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_PLUS_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_PLUS_ASSIGN_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_arithmetic_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/either_is_class_or_union_and_not_void.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_plus_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_plus_assign_op_impl, +=)
+
+template<class T,class U = T>
+struct has_plus_assign_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        detail::is_arithmetic_or_enum<typename remove_reference<U>::type>
+      >,
+      mpl::and_<
+        detail::is_object_pointer<typename remove_reference<T>::type>,
+        detail::is_integral_or_enum<typename remove_reference<U>::type>
+      >,
+      detail::either_is_class_or_union_and_not_void<T,U>
+    >,
+    detail::has_plus_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_PLUS_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_plus_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_plus_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,54 @@
+
+//  (C) Copyright Terje Slettebø and Tobias Schwinger 2004
+//  Use, modification and distribution are subject to the Boost Software 
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_CT_OPERATOR_HAS_PLUS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_PLUS_OP_HPP
+
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/eval_if.hpp"
+
+#include "boost/concept_traits/operator/detail/binop.hpp"
+#include "boost/concept_traits/operator/detail/plus_minus_binop_prefilter.hpp"
+
+// Should be the last file to include
+#include "boost/type_traits/detail/bool_trait_def.hpp"
+
+namespace boost { 
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(test_plus_op, +)
+
+namespace concept_traits
+{
+
+template <typename T, typename U>
+struct has_plus_op_impl
+{
+  typedef typename facility::filtered_bool_trait< 
+    detail::test_plus_op<T,U>
+  , detail::plus_minus_binop_prefilter<T,U> >::type type;
+
+  BOOST_STATIC_CONSTANT(bool, value = (type::value));
+};
+
+} // namespace concept_traits
+
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(has_plus_op,T,U,(
+  ::boost::concept_traits::has_plus_op_impl<T,U>::value 
+))
+
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,has_plus_op,T,T,(
+  ::boost::concept_traits::has_plus_op_impl<T,T>::value 
+))
+#endif
+
+} // namespace ::boost
+
+#include "boost/type_traits/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_CT_OPERATOR_HAS_PLUS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_pointer_to_member_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_pointer_to_member_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_POINTER_TO_MEMBER_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_POINTER_TO_MEMBER_OP_HPP
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_pointer_to_member_op
+//
+// The pointer to member operator has to be a member function, so it can only be
+// detected for classes and unions by specialising this trait. It gives default
+// true for these.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U = T>
+struct has_pointer_to_member_op :
+  mpl::or_<
+    mpl::and_<
+      is_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_pointer<typename remove_reference<T>::type>::type>,
+      is_member_pointer<typename remove_reference<U>::type>
+    >,
+    detail::is_class_or_union_<typename remove_reference<T>::type>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_POINTER_TO_MEMBER_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_post_decrement_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_post_decrement_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_POST_DECREMENT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_POST_DECREMENT_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop2.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_post_decrement_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP2_TRAIT(has_post_decrement_op_impl, --)
+
+template<class T>
+struct has_post_decrement_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        mpl::not_<
+          is_same<typename remove_cv<typename remove_reference<T>::type>::type,bool>
+        >
+      >,
+      detail::is_object_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_post_decrement_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_POST_DECREMENT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_post_increment_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_post_increment_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_POST_INCREMENT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_POST_INCREMENT_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop2.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_post_increment_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP2_TRAIT(has_post_increment_op_impl, ++)
+
+template<class T>
+struct has_post_increment_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      is_arithmetic<typename remove_reference<T>::type>,
+      detail::is_object_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_pre_increment_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_POST_INCREMENT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_pre_decrement_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_pre_decrement_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_PRE_DECREMENT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_PRE_DECREMENT_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_pre_decrement_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_pre_decrement_op_impl, --)
+
+template<class T>
+struct has_pre_decrement_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      mpl::and_<
+        is_arithmetic<typename remove_reference<T>::type>,
+        mpl::not_<
+          is_same<typename remove_cv<typename remove_reference<T>::type>::type,bool>
+        >
+      >,
+      detail::is_object_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_pre_decrement_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_PRE_DECREMENT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_pre_increment_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_pre_increment_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_PRE_INCREMENT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_PRE_INCREMENT_OP_HPP
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_not_const.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_pre_increment_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_pre_increment_op_impl, ++)
+
+template<class T>
+struct has_pre_increment_op :
+  mpl::and_<
+    detail::is_not_const<typename remove_reference<T>::type>,
+    mpl::or_<
+      is_arithmetic<typename remove_reference<T>::type>,
+      detail::is_object_pointer<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_pre_increment_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_PRE_INCREMENT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_assign_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_assign_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_ASSIGN_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_ASSIGN_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_right_shift_assign_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_right_shift_assign_op_impl, >>=)
+
+template<class T,class U = T>
+struct has_right_shift_assign_op :
+  mpl::and_<
+    detail::has_shift_assign_op<T,U>,
+    detail::has_right_shift_assign_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_ASSIGN_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_right_shift_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_OP_HPP
+
+#include <boost/mpl/and.hpp>
+#include <boost/concept_traits/operator/detail/has_shift_op.hpp>
+#include <boost/concept_traits/operator/detail/binop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_right_shift_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_BINOP_TRAIT(has_right_shift_op_impl, >>)
+
+template<class T,class U = T>
+struct has_right_shift_op :
+  mpl::and_<
+    detail::has_shift_op<T,U>,
+    detail::has_right_shift_op_impl<T,U>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_RIGHT_SHIFT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_subscript_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_subscript_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_SUBSCRIPT_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_SUBSCRIPT_OP_HPP
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/is_integral_or_enum.hpp>
+#include <boost/concept_traits/operator/detail/is_object_pointer.hpp>
+#include <boost/concept_traits/operator/detail/is_class_or_union.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_subscript_op
+//
+// The subscript operator has to be a member function, so it can only be
+// detected for classes and unions by specialising this trait. It gives default
+// true for these.
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T,class U>
+struct has_subscript_op :
+  mpl::or_<
+    mpl::and_<
+      mpl::or_<
+        detail::is_object_pointer<typename remove_reference<T>::type>,
+        is_array<typename remove_reference<T>::type>
+      >,
+      detail::is_integral_or_enum<typename remove_reference<U>::type>
+    >,
+    detail::is_class_or_union_<typename remove_reference<T>::type>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_SUBSCRIPT_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_unary_minus_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_unary_minus_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_UNARY_MINUS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_UNARY_MINUS_OP_HPP
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_unary_minus_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_unary_minus_op_impl, -)
+
+template<class T>
+struct has_unary_minus_op :
+  mpl::and_<
+    mpl::or_<
+      detail::is_arithmetic_or_enum<typename remove_reference<T>::type>,
+      detail::is_class_or_union_<typename remove_reference<T>::type>
+    >,
+    detail::has_unary_minus_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_UNARY_MINUS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/has_unary_plus_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/has_unary_plus_op.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_HAS_UNARY_PLUS_OP_HPP
+#define BOOST_CT_OPERATOR_HAS_UNARY_PLUS_OP_HPP
+
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/concept_traits/operator/detail/unop.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_unary_plus_op
+///////////////////////////////////////////////////////////////////////////////
+
+BOOST_CT_OPERATOR_DETAIL_DEFINE_UNOP_TRAIT(has_unary_plus_op_impl, +)
+
+template<class T>
+struct has_unary_plus_op :
+  mpl::and_<
+    is_object<typename remove_reference<T>::type>,
+    mpl::not_<
+      is_member_pointer<typename remove_reference<T>::type>
+    >,
+    detail::has_unary_plus_op_impl<T>
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_OPERATOR_HAS_UNARY_PLUS_OP_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator/operator_traits_TBR.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator/operator_traits_TBR.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits unit test
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_OPERATOR_HPP
+#define BOOST_CT_OPERATOR_OPERATOR_HPP
+
+#include <boost/concept_traits/operator/has_default_constructor.hpp>
+#include <boost/concept_traits/operator/has_copy_constructor.hpp>
+#include <boost/concept_traits/operator/has_assignment_op.hpp>
+
+#include <boost/concept_traits/operator/has_pre_increment_op.hpp>
+#include <boost/concept_traits/operator/has_pre_decrement_op.hpp>
+#include <boost/concept_traits/operator/has_logical_not_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_not_op.hpp>
+#include <boost/concept_traits/operator/has_unary_plus_op.hpp>
+#include <boost/concept_traits/operator/has_unary_minus_op.hpp>
+#include <boost/concept_traits/operator/has_address_of_op.hpp>
+#include <boost/concept_traits/operator/has_dereference_op.hpp>
+#include <boost/concept_traits/operator/has_member_access_op.hpp>
+
+#include <boost/concept_traits/operator/has_post_increment_op.hpp>
+#include <boost/concept_traits/operator/has_post_decrement_op.hpp>
+
+#include <boost/concept_traits/operator/has_plus_op.hpp>
+#include <boost/concept_traits/operator/has_minus_op.hpp>
+#include <boost/concept_traits/operator/has_multiply_op.hpp>
+#include <boost/concept_traits/operator/has_divide_op.hpp>
+#include <boost/concept_traits/operator/has_modulus_op.hpp>
+
+#include <boost/concept_traits/operator/has_left_shift_op.hpp>
+#include <boost/concept_traits/operator/has_right_shift_op.hpp>
+
+#include <boost/concept_traits/operator/has_equal_op.hpp>
+#include <boost/concept_traits/operator/has_not_equal_op.hpp>
+#include <boost/concept_traits/operator/has_less_than_op.hpp>
+#include <boost/concept_traits/operator/has_greater_than_op.hpp>
+#include <boost/concept_traits/operator/has_less_equal_op.hpp>
+#include <boost/concept_traits/operator/has_greater_equal_op.hpp>
+
+#include <boost/concept_traits/operator/has_bitwise_and_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_xor_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_or_op.hpp>
+
+#include <boost/concept_traits/operator/has_logical_and_op.hpp>
+#include <boost/concept_traits/operator/has_logical_or_op.hpp>
+
+#include <boost/concept_traits/operator/has_plus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_minus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_multiply_assign_op.hpp>
+#include <boost/concept_traits/operator/has_divide_assign_op.hpp>
+#include <boost/concept_traits/operator/has_modulus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_left_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/has_right_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_and_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_xor_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_or_assign_op.hpp>
+
+#include <boost/concept_traits/operator/has_subscript_op.hpp>
+#include <boost/concept_traits/operator/has_pointer_to_member_op.hpp>
+#include <boost/concept_traits/operator/has_comma_op.hpp>
+
+#include <boost/concept_traits/operator/has_function_call_op.hpp>
+
+#endif // BOOST_CT_OPERATOR_OPERATOR_HPP
Added: sandbox/concept_traits/boost/concept_traits/operator_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/operator_traits.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////
+// Operator traits unit test
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_OPERATOR_OPERATOR_HPP
+#define BOOST_CT_OPERATOR_OPERATOR_HPP
+
+#include <boost/concept_traits/operator/has_default_constructor.hpp>
+#include <boost/concept_traits/operator/has_copy_constructor.hpp>
+#include <boost/concept_traits/operator/has_assignment_op.hpp>
+
+#include <boost/concept_traits/operator/has_pre_increment_op.hpp>
+#include <boost/concept_traits/operator/has_pre_decrement_op.hpp>
+#include <boost/concept_traits/operator/has_logical_not_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_not_op.hpp>
+#include <boost/concept_traits/operator/has_unary_plus_op.hpp>
+#include <boost/concept_traits/operator/has_unary_minus_op.hpp>
+#include <boost/concept_traits/operator/has_address_of_op.hpp>
+#include <boost/concept_traits/operator/has_dereference_op.hpp>
+#include <boost/concept_traits/operator/has_member_access_op.hpp>
+
+#include <boost/concept_traits/operator/has_post_increment_op.hpp>
+#include <boost/concept_traits/operator/has_post_decrement_op.hpp>
+
+#include <boost/concept_traits/operator/has_plus_op.hpp>
+#include <boost/concept_traits/operator/has_minus_op.hpp>
+#include <boost/concept_traits/operator/has_multiply_op.hpp>
+#include <boost/concept_traits/operator/has_divide_op.hpp>
+#include <boost/concept_traits/operator/has_modulus_op.hpp>
+
+#include <boost/concept_traits/operator/has_left_shift_op.hpp>
+#include <boost/concept_traits/operator/has_right_shift_op.hpp>
+
+#include <boost/concept_traits/operator/has_equal_op.hpp>
+#include <boost/concept_traits/operator/has_not_equal_op.hpp>
+#include <boost/concept_traits/operator/has_less_than_op.hpp>
+#include <boost/concept_traits/operator/has_greater_than_op.hpp>
+#include <boost/concept_traits/operator/has_less_equal_op.hpp>
+#include <boost/concept_traits/operator/has_greater_equal_op.hpp>
+
+#include <boost/concept_traits/operator/has_bitwise_and_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_xor_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_or_op.hpp>
+
+#include <boost/concept_traits/operator/has_logical_and_op.hpp>
+#include <boost/concept_traits/operator/has_logical_or_op.hpp>
+
+#include <boost/concept_traits/operator/has_plus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_minus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_multiply_assign_op.hpp>
+#include <boost/concept_traits/operator/has_divide_assign_op.hpp>
+#include <boost/concept_traits/operator/has_modulus_assign_op.hpp>
+#include <boost/concept_traits/operator/has_left_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/has_right_shift_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_and_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_xor_assign_op.hpp>
+#include <boost/concept_traits/operator/has_bitwise_or_assign_op.hpp>
+
+#include <boost/concept_traits/operator/has_subscript_op.hpp>
+#include <boost/concept_traits/operator/has_pointer_to_member_op.hpp>
+#include <boost/concept_traits/operator/has_comma_op.hpp>
+
+#include <boost/concept_traits/operator/has_function_call_op.hpp>
+
+#endif // BOOST_CT_OPERATOR_OPERATOR_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/has_member.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/has_member.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_HAS_MEMBER_HPP
+#define BOOST_CT_TT_EXT_HAS_MEMBER_HPP
+
+#include <boost/config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER(name)\
+template<class T>\
+struct has_member_##name\
+{\
+  template<class>\
+  struct class_of;\
+\
+  template<class R,class C>\
+  struct class_of<R C::*>\
+  {\
+    typedef C type;\
+  };\
+\
+  template<T>\
+  struct helper;\
+\
+  template<class U>\
+  static char check(helper<&U::name> *);\
+\
+  template<class U>\
+  static char (&check(...))[2];\
+\
+  typedef has_member_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(check<typename class_of<T>::type>(0))==1);\
+};
+
+#endif // BOOST_CT_TT_EXT_HAS_MEMBER_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/has_member_class_template.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/has_member_class_template.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,236 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_HAS_MEMBER_CLASS_TEMPLATE_HPP
+#define BOOST_CT_TT_EXT_HAS_MEMBER_CLASS_TEMPLATE_HPP
+
+#include <boost/config.hpp> // For BOOST_STATIC_CONSTANT
+#include <boost/mpl/void.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER_CLASS_TEMPLATE
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER_CLASS_TEMPLATE(name)\
+  BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE5(name)\
+  BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE1(name)\
+  BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE2(name)\
+  BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE3(name)\
+  BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE4(name)
+
+#define BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE5(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_class_template_##name##_detail5 {\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1,\
+  class P4_1,\
+  class P5_1\
+>\
+  char test(typename T1::template name<P1_1,P2_1,P3_1,P4_1,P5_1> *);\
+\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1,\
+  class P4_1,\
+  class P5_1\
+>\
+  char (&test(...))[2];\
+} /* namespace has_member_class_template_##name##_detail5 */\
+\
+template<\
+  class T,\
+  class P1 = ::boost::mpl::void_,\
+  class P2 = ::boost::mpl::void_,\
+  class P3 = ::boost::mpl::void_,\
+  class P4 = ::boost::mpl::void_,\
+  class P5 = ::boost::mpl::void_\
+>\
+struct has_member_class_template_##name\
+{\
+  typedef has_member_class_template_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_class_template_##name##_detail5::test<T,P1,P2,P3,P4,P5>(0))==1);\
+};
+
+#define BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE1(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_class_template_##name##_detail1 {\
+template<\
+  class T1,\
+  class P1_1\
+>\
+char test(typename T1::template name<P1_1> *);\
+\
+template<\
+  class T1,\
+  class P1_1\
+>\
+char (&test(...))[2];\
+} /* namespace has_member_class_template_##name##_detail1 */\
+\
+template<\
+  class T,\
+  class P1\
+>\
+struct has_member_class_template_##name<\
+  T,\
+  P1,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_\
+>\
+{\
+\
+  typedef has_member_class_template_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_class_template_##name##_detail1::test<T,P1>(0))==1);\
+};\
+
+#define BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE2(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_class_template_##name##_detail2 {\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1\
+>\
+char test(typename T1::template name<P1_1,P2_1> *);\
+\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1\
+>\
+char (&test(...))[2];\
+} /* namespace has_member_class_template_##name##_detail2 */\
+\
+template<\
+  class T,\
+  class P1,\
+  class P2\
+>\
+struct has_member_class_template_##name<\
+  T,\
+  P1,\
+  P2,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_>\
+{\
+  typedef has_member_class_template_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_class_template_##name##_detail2::test<T,P1,P2>(0))==1);\
+};\
+
+#define BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE3(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_class_template_##name##_detail3 {\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1\
+>\
+char test(typename T1::template name<P1_1,P2_1,P3_1> *);\
+\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1\
+>\
+char (&test(...))[2];\
+} /* namespace has_member_class_template_##name##_detail3 */\
+\
+template<\
+  class T,\
+  class P1,\
+  class P2,\
+  class P3\
+>\
+struct has_member_class_template_##name<\
+  T,\
+  P1,\
+  P2,\
+  P3,\
+  ::boost::mpl::void_,\
+  ::boost::mpl::void_\
+>\
+{\
+\
+  typedef has_member_class_template_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_class_template_##name##_detail3::test<T,P1,P2,P3>(0))==1);\
+};\
+
+#define BOOST_CT_TT_EXT_DETAIL_DEFINE_HAS_MEMBER_CLASS_TEMPLATE4(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_class_template_##name##_detail4 {\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1,\
+  class P4_1\
+>\
+char test(typename T1::template name<P1_1,P2_1,P3_1,P4_1> *);\
+\
+template<\
+  class T1,\
+  class P1_1,\
+  class P2_1,\
+  class P3_1,\
+  class P4_1\
+>\
+char (&test(...))[2];\
+} /* namespace has_member_class_template_##name##_detail4 */\
+\
+template<\
+  class T,\
+  class P1,\
+  class P2,\
+  class P3,\
+  class P4\
+>\
+struct has_member_class_template_##name<\
+  T,\
+  P1,\
+  P2,\
+  P3,\
+  P4,\
+  ::boost::mpl::void_\
+>\
+{\
+  typedef has_member_class_template_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_class_template_##name##_detail4::test<T,P1,P2,P3,P4>(0))==1);\
+};
+
+#endif // BOOST_CT_TT_EXT_HAS_MEMBER_CLASS_TEMPLATE_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/has_member_function.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/has_member_function.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_HAS_MEMBER_FUNCTION_HPP
+#define BOOST_CT_TT_EXT_HAS_MEMBER_FUNCTION_HPP
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval.hpp>
+#include <boost/type_traits/pointer_to_member_function.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// has_member_function
+///////////////////////////////////////////////////////////////////////////////
+
+template<
+  class T,
+  template<class> class MemberFunction,
+  class R,
+  class P1 = mpl::void_,
+  class P2 = mpl::void_,
+  class P3 = mpl::void_,
+  class P4 = mpl::void_,
+  class P5 = mpl::void_
+>
+struct has_member_function :
+  mpl::eval<
+    MemberFunction<
+      mpl::eval<
+        pointer_to_member_function<
+          mpl::identity<T>,
+          R,
+          P1,
+          P2,
+          P3,
+          P4,
+          P5
+        >
+      >
+    >
+  > {};
+
+} // namespace boost
+
+#endif // BOOST_CT_TT_EXT_HAS_MEMBER_FUNCTION_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/has_member_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/has_member_type.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_HAS_MEMBER_TYPE_HPP
+#define BOOST_CT_TT_EXT_HAS_MEMBER_TYPE_HPP
+
+#include <boost/config.hpp> // For BOOST_STATIC_CONSTANT
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER_TYPE
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_DEFINE_HAS_MEMBER_TYPE(name)\
+/*\
+ * g++ 3.2 doesn't work with these as static member functions, so they are put\
+ * in a namespace, instead\
+ */\
+namespace has_member_type_##name##_detail {\
+template<class U>\
+char test(typename U::name *);\
+\
+template<class U>\
+char (&test(...))[2];\
+} /* namespace has_member_type_##name##_detail */\
+\
+template<class T>\
+struct has_member_type_##name\
+{\
+  typedef has_member_type_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_type_##name##_detail::test<T>(0))==1);\
+};
+
+#endif // BOOST_CT_TT_EXT_HAS_MEMBER_TYPE_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/has_static_member.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/has_static_member.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_HAS_STATIC_MEMBER_HPP
+#define BOOST_CT_TT_EXT_HAS_STATIC_MEMBER_HPP
+
+#include <boost/config.hpp> // For BOOST_STATIC_CONSTANT
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_DEFINE_HAS_STATIC_MEMBER
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_DEFINE_HAS_STATIC_MEMBER(name)\
+template<class T,class Type>\
+struct has_static_member_##name\
+{\
+  template<Type *>\
+  struct helper;\
+\
+  template<class U>\
+  static char test(helper<&U::name> *);\
+\
+  template<class U>\
+  static char (&test(...))[2];\
+\
+  typedef has_static_member_##name type;\
+\
+  BOOST_STATIC_CONSTANT(bool, value=sizeof(test<T>(0))==1);\
+};
+
+#endif // BOOST_CT_TT_EXT_HAS_STATIC_MEMBER_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/member_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/member_type.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_MEMBER_TYPE_HPP
+#define BOOST_CT_TT_EXT_MEMBER_TYPE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_MEMBER_TYPE
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_MEMBER_TYPE(name)\
+template<class T>\
+struct member_type_##name\
+{\
+  typedef typename T::name type;\
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_MEMBER_TYPE_CONST
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_MEMBER_TYPE_CONST(name)\
+template<class T>\
+struct member_type_const_##name\
+{\
+  typedef const typename T::name type;\
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_CT_TT_EXT_MEMBER_TYPE_CONST_REF
+///////////////////////////////////////////////////////////////////////////////
+
+#define BOOST_CT_TT_EXT_MEMBER_TYPE_CONST_REF(name)\
+template<class T>\
+struct member_type_const_ref_##name\
+{\
+  typedef const typename T::name & type;\
+};
+
+#endif // BOOST_CT_TT_EXT_MEMBER_TYPE_HPP
Added: sandbox/concept_traits/boost/concept_traits/type_traits/pointer_to_member_function.hpp
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/boost/concept_traits/type_traits/pointer_to_member_function.hpp	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,249 @@
+///////////////////////////////////////////////////////////////////////////////
+// Concept traits
+//
+// (C) Copyright Terje Slettebø and Tobias Schwinger 2004.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CT_TT_EXT_POINTER_TO_MEMBER_FUNCTION_HPP
+#define BOOST_CT_TT_EXT_POINTER_TO_MEMBER_FUNCTION_HPP
+
+#include <boost/mpl/void.hpp>
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// pointer_to_member_function
+///////////////////////////////////////////////////////////////////////////////
+
+template<
+  class T,
+  class R,
+  class P1 = mpl::void_,
+  class P2 = mpl::void_,
+  class P3 = mpl::void_,
+  class P4 = mpl::void_,
+  class P5 = mpl::void_
+>
+struct pointer_to_member_function
+{
+  typedef R (T::*type)(P1,P2,P3,P4,P5);
+};
+
+template<
+  class T,
+  class R
+>
+struct pointer_to_member_function<
+  T,
+  R,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)();
+};
+
+template<
+  class T,
+  class R,
+  class P1
+>
+struct pointer_to_member_function<
+  T,
+  R,
+  P1,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1);
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2
+>
+struct pointer_to_member_function<
+  T,
+  R,
+  P1,
+  P2,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2);
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2,
+  class P3
+>
+struct pointer_to_member_function<
+  T,
+  R,
+  P1,
+  P2,
+  P3,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2,P3);
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2,
+  class P3,
+  class P4
+>
+struct pointer_to_member_function<
+  T,
+  R,
+  P1,
+  P2,
+  P3,
+  P4,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2,P3,P4);
+};
+
+template<
+  class T,
+  class R
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)() const;
+};
+
+template<
+  class T,
+  class R,
+  class P1
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  P1,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1) const;
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  P1,
+  P2,
+  mpl::void_,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2) const;
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2,
+  class P3
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  P1,
+  P2,
+  P3,
+  mpl::void_,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2,P3) const;
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2,
+  class P3,
+  class P4
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  P1,
+  P2,
+  P3,
+  P4,
+  mpl::void_
+>
+{
+  typedef R (T::*type)(P1,P2,P3,P4) const;
+};
+
+template<
+  class T,
+  class R,
+  class P1,
+  class P2,
+  class P3,
+  class P4,
+  class P5
+>
+struct pointer_to_member_function<
+  const T,
+  R,
+  P1,
+  P2,
+  P3,
+  P4,
+  P5
+>
+{
+  typedef R (T::*type)(P1,P2,P3,P4,P5) const;
+};
+
+} // namespace boost
+
+#endif // BOOST_CT_TT_EXT_POINTER_TO_MEMBER_FUNCTION_HPP
Added: sandbox/concept_traits/doc/html/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/doc/html/boostbook.css	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,538 @@
+/*=============================================================================
+    Copyright (c) 2004 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+/*=============================================================================
+    Body defaults
+=============================================================================*/
+
+    body 
+    {
+        margin: 1em;
+        font-family: sans-serif;
+    }
+
+/*=============================================================================
+    Paragraphs
+=============================================================================*/
+
+    p 
+    {
+        text-align: left;
+        font-size: 10pt; 
+        line-height: 1.15;
+    }
+
+/*=============================================================================
+    Program listings
+=============================================================================*/
+
+    /* Code on paragraphs */
+    p tt.computeroutput
+    {
+        font-size: 10pt;
+    }
+
+    pre.synopsis
+    {
+        font-size: 10pt;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    .programlisting, 
+    .screen
+    {
+        font-size: 10pt;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+/*=============================================================================
+    Headings
+=============================================================================*/
+
+    h1, h2, h3, h4, h5, h6 
+    { 
+        text-align: left;
+        margin: 1em 0em 0.5em 0em;
+        font-weight: bold;
+    }
+
+    h1 { font: 140% }
+    h2 { font: bold 140% }
+    h3 { font: bold 130% }
+    h4 { font: bold 120% }
+    h5 { font: italic 110% }
+    h6 { font: italic 100% }
+
+    /* Top page titles */
+    title, 
+    h1.title, 
+    h2.title
+    h3.title, 
+    h4.title, 
+    h5.title, 
+    h6.title, 
+    .refentrytitle
+    {
+        font-weight: bold;
+        margin-bottom: 1pc;
+    }
+
+    h1.title { font-size: 140% }
+    h2.title { font-size: 140% }
+    h3.title { font-size: 130% }
+    h4.title { font-size: 120% }
+    h5.title { font-size: 110% }
+    h6.title { font-size: 100% }
+
+    .section h1 
+    {
+        margin: 0em 0em 0.5em 0em;
+        font-size: 140%;
+    }
+
+    .section h2 { font-size: 140% }
+    .section h3 { font-size: 130% }
+    .section h4 { font-size: 120% }
+    .section h5 { font-size: 110% }
+    .section h6 { font-size: 100% }
+
+    /* Code on titles */
+    h1 tt.computeroutput { font-size: 140% }
+    h2 tt.computeroutput { font-size: 140% }
+    h3 tt.computeroutput { font-size: 130% }
+    h4 tt.computeroutput { font-size: 120% }
+    h5 tt.computeroutput { font-size: 110% }
+    h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+    Author
+=============================================================================*/
+
+    h3.author 
+    { 
+        font-size: 100% 
+    }
+
+/*=============================================================================
+    Lists
+=============================================================================*/
+
+    li
+    {
+        font-size: 10pt;
+        line-height: 1.3;
+    }
+
+    /* Unordered lists */
+    ul 
+    {
+        text-align: left;
+    }
+
+    /* Ordered lists */
+    ol 
+    {
+        text-align: left;
+    }
+
+/*=============================================================================
+    Links
+=============================================================================*/
+
+    a
+    {
+        text-decoration: none; /* no underline */
+    }
+
+    a:hover
+    {
+        text-decoration: underline;
+    }
+
+/*=============================================================================
+    Spirit style navigation
+=============================================================================*/
+
+    .spirit-nav
+    {
+        text-align: right;
+    }
+
+    .spirit-nav a
+    {
+        color: white;
+        padding-left: 0.5em;
+    }
+
+    .spirit-nav img
+    {
+        border-width: 0px;
+    }
+
+/*=============================================================================
+    Table of contents
+=============================================================================*/
+
+    .toc
+    {
+       margin: 1pc 4% 0pc 4%;
+       padding: 0.1pc 1pc 0.1pc 1pc;
+       font-size: 10pt;
+       line-height: 1.15;
+    }
+
+    .toc-main
+    {
+     width: 600;
+    text-align: center;
+       margin: 1pc 1pc 1pc 10%;
+       padding: 2pc 1pc 3pc 1pc;
+    line-height: 0.1;
+    }
+
+    .boost-toc
+    {
+       float: right;
+       padding: 0.5pc;
+    }
+
+/*=============================================================================
+    Tables
+=============================================================================*/
+
+    .table-title, 
+    div.table p.title
+    {
+        margin-left: 4%;
+        padding-right: 0.5em; 
+        padding-left: 0.5em;
+    }
+
+    .informaltable table, 
+    .table table
+    {
+        width: 92%;
+        margin-left: 4%;
+        margin-right: 4%;
+    }
+
+    div.informaltable table, 
+    div.table table
+    {
+        padding: 4px;
+    }
+
+    /* Table Cells */
+    div.informaltable table tr td, 
+    div.table table tr td
+    {
+        padding: 0.5em;
+        text-align: left;
+    }
+
+    div.informaltable table tr th, 
+    div.table table tr th
+    {
+        padding: 0.5em 0.5em 0.5em 0.5em;
+        border: 1pt solid white;
+        font-size: 120%;
+    }
+
+/*=============================================================================
+    Blurbs
+=============================================================================*/
+
+    div.note,
+    div.tip,
+    div.important,
+    div.caution,
+    div.warning,
+    p.blurb
+    {
+        font-size: 10pt;
+        line-height: 1.2;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    p.blurb img
+    {
+        padding: 1pt;
+    }
+
+/*=============================================================================
+    Variable Lists
+=============================================================================*/
+
+    span.term
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td
+    {
+        text-align: left;
+        vertical-align: top;
+        padding: 0em 2em 0em 0em;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td p
+    {
+        margin: 0em 0em 0.5em 0em;
+    }
+
+    /* Make the terms in definition lists bold */
+    div.variablelist dl dt
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist dl dd
+    {
+        margin: 1em 0em 1em 2em;
+        font-size: 10pt;
+    }
+
+/*=============================================================================
+    Misc
+=============================================================================*/
+
+    /* Title of books and articles in bibliographies */
+    span.title
+    {
+        font-style: italic;
+    }
+
+    span.underline
+    {
+        text-decoration: underline;
+    }
+
+    span.strikethrough
+    {
+        text-decoration: line-through;
+    }
+
+    /* Copyright, Legal Notice */
+    div div.legalnotice p
+    {
+        font-size: 8pt;
+        text-align: left
+    }
+
+/*=============================================================================
+    Colors
+=============================================================================*/
+
+    @media screen
+    {
+        /* Links */
+        a
+        {
+            color: #0C7445;
+        }
+
+        a:visited
+        {
+            color: #663974;
+        }
+
+        h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+        h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+        h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+        {
+            text-decoration: none; /* no underline */
+            color: #000000;
+        }
+
+        /* Syntax Highlighting */
+        .keyword        { color: #0000AA; }
+        .identifier     { color: #000000; }
+        .special        { color: #707070; }
+        .preprocessor   { color: #402080; }
+        .char           { color: teal; }
+        .comment        { color: #800000; }
+        .string         { color: teal; }
+        .number         { color: teal; }
+        .white_bkd      { background-color: #E8FBE9; }
+        .dk_grey_bkd    { background-color: #A0DAAC; }
+
+        /* Copyright, Legal Notice */
+        .copyright
+        { 
+            color: #666666; 
+            font-size: small; 
+        }
+
+        div div.legalnotice p
+        {
+            color: #666666;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Blurbs */
+        div.note,
+        div.tip,
+        div.important,
+        div.caution,
+        div.warning,
+        p.blurb
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            background-color: #E3F9E4;
+            border: 1px solid #DCDCDC;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            color: #00A000;
+        }
+    }
+
+    @media print
+    {
+        /* Links */
+        a
+        {
+            color: black;
+        }
+
+        a:visited
+        {
+            color: black;
+        }
+
+        .spirit-nav
+        {
+            display: none;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .informaltable table, 
+        .table table
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            border-collapse: collapse;
+            background-color: #FAFFFB;
+        }
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            font-weight: bold;
+        }
+    }
Added: sandbox/concept_traits/doc/html/reference.css
==============================================================================
--- (empty file)
+++ sandbox/concept_traits/doc/html/reference.css	2010-09-12 23:22:07 EDT (Sun, 12 Sep 2010)
@@ -0,0 +1,13 @@
+/*=============================================================================
+    Copyright (c) 2004 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+PRE.synopsis { 
+  background-color: #e0ffff;
+  border: thin solid blue;
+  padding: 1em
+}
Added: sandbox/concept_traits/doc/src/images/alert.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/1.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/10.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/11.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/12.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/13.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/14.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/15.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/2.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/3.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/4.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/5.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/6.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/7.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/8.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/callouts/9.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/caution.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/draft.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/home.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/important.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/next.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/next_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/note.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/prev.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/prev_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/smiley.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/tip.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/toc-blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/toc-minus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/toc-plus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/up.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/up_disabled.png
==============================================================================
Binary file. No diff available.
Added: sandbox/concept_traits/doc/src/images/warning.png
==============================================================================
Binary file. No diff available.