|
Boost-Commit : |
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.
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk