Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r80724 - in sandbox/generic: . include include/boost include/boost/generic include/boost/generic/archetype include/boost/generic/assert include/boost/generic/config include/boost/generic/config/std_lib include/boost/generic/config/std_lib/detail include/boost/generic/detail include/boost/generic/detail/ad_hoc_concept include/boost/generic/detail/auto_concept_map include/boost/generic/detail/concept include/boost/generic/detail/concept_map include/boost/generic/detail/std_forward_decl include/boost/generic/detail/std_forward_decl/_libstdcpp_ include/boost/generic/detail/this include/boost/generic/std_concept include/boost/generic/std_concept/concepts include/boost/generic/std_concept/container_concepts include/boost/generic/std_concept/iterator_concepts include/boost/generic/std_concept/memory_concepts include/boost/generic/std_concept/support_concepts include/boost/generic/type_traits libs test test/libs test/libs/generic test/libs/generic/test test/libs/generic/test/archetype test/libs/generic/test/detail test/libs/generic/test/detail/ad_hoc_concept test/libs/generic/test/detail/auto_concept_map test/libs/generic/test/detail/concept test/libs/generic/test/detail/concept_map test/libs/generic/test/std_concept test/libs/generic/test/std_concept/concepts test/libs/generic/test/std_concept/container_concepts test/libs/generic/test/std_concept/iterator_concepts test/libs/generic/test/std_concept/memory_concepts test/libs/generic/test/std_concept/support_concepts
From: rivorus_at_[hidden]
Date: 2012-09-27 12:38:53


Author: matt_calabrese
Date: 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
New Revision: 80724
URL: http://svn.boost.org/trac/boost/changeset/80724

Log:
Boost.Generic initial sandbox commit.
Added:
   sandbox/generic/include/
   sandbox/generic/include/boost/
   sandbox/generic/include/boost/generic/
   sandbox/generic/include/boost/generic/archetype/
   sandbox/generic/include/boost/generic/archetype.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/archetype/null_archetype.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/assert/
   sandbox/generic/include/boost/generic/assert.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/assert/assert_concept_may_be_modeled_by.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/auto_concept.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/auto_concept_map.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/concept.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/concept_map.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/config/
   sandbox/generic/include/boost/generic/config.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/config/compiler.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/config/emulate_concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/config/std_lib/
   sandbox/generic/include/boost/generic/config/std_lib.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/config/std_lib/detail/
   sandbox/generic/include/boost/generic/config/std_lib/detail/_libstdcpp_.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/
   sandbox/generic/include/boost/generic/detail/128_args.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/actual_typedefs_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/ad_hoc_concept/
   sandbox/generic/include/boost/generic/detail/ad_hoc_concept/arg_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/ad_hoc_concept/name_param_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/ad_hoc_concept/try_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/always_void.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/and.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/are_valid_params.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/arg_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/arg_of_category.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/args_to_array.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/args_to_sequence.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/array_to_seq.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/asm_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/assert_at_global_scope.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/auto_concept_map/
   sandbox/generic/include/boost/generic/detail/auto_concept_map/arg_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/auto_concept_map/name_param_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/axiom_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/completed_concept_map_bases.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept/
   sandbox/generic/include/boost/generic/detail/concept/arg_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept/emulator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept/emulator_state.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept/name_param_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept/req_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_and_params_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_impl_of.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_is_valid.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map/
   sandbox/generic/include/boost/generic/detail/concept_map/arg_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map/body_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map/concept_and_params_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map/map_specifier_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map/typedef_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map_impl.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_map_template.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concept_sig_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/concepts_are_modeled.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/deduce_typename_helper_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/deduce_typename_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/deduction_result.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/dummy_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/eat.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/eat_part_after_paren.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/empty_file.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/error.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/error_info.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/first_pass_type_metafun_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/function_checker_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/function_decl_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/function_sequence_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/head_argument.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/increment_concept_map_id.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/instantiate.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/intercept.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/interpreted_requirement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_concept.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_conditional_arg.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_empty.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_error.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_not_same.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_operator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_parenthesized.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_recognized_arg.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_seq_nil.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_this.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_valid_name_and_params.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/is_valid_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/map_index.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/map_name_params_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/mem_operator_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/multi_decl_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/mutable_state.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/namespace.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/nary_cat.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/native_requirement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/nested_name_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/no_return_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/num_args.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/num_args_is_1.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/num_args_is_2.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/operator_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/ordered_iif.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_id.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_id_category.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_id_category_value.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_id_implies_parentheses.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_id_value.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_list.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/param_templates.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/params_for_each.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/params_to_list.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/piecewise_concept_maps.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/pop_last_arg.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/preprocess_header_begin.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/preprocess_header_end.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/public_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/remove_paren.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/requires_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/rescan.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/seq_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/seq_enum.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/seq_size.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/seq_to_seq.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/sfinae_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/simplify_variadic_param_list.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/split_param_id_and_param.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/starts_empty_or_parenthesized.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/static_assert_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_concept_preprocessing_utilities.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_forward_decl/
   sandbox/generic/include/boost/generic/detail/std_forward_decl.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/
   sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_array_iterator_.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_deque_iterator_.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_bool_iterator_.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_iterator_.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/tag_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/tail_arguments.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/tail_is_empty.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/template_decl.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/template_decl_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/this/
   sandbox/generic/include/boost/generic/detail/this/function_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/this/typename_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/this_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/this_mem_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/trailing_bases.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/type_and_fun_separator_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/type_list.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/type_stack.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/typedef_first_pass_types_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/typename_details.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/typename_nested_dets.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/typename_sequence_vistor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/typename_visitor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/types_and_enabler.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/unique_id.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/variadic_cat.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/variadic_empty.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/variadic_identity.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/variadic_stringize.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/detail/wrap.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/limits.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/
   sandbox/generic/include/boost/generic/std_concept.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/
   sandbox/generic/include/boost/generic/std_concept/concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/callable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/callable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/regular.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/regular.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/true.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/true.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/
   sandbox/generic/include/boost/generic/std_concept/container_concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/
   sandbox/generic/include/boost/generic/std_concept/memory_concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocatable_element.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/constructible_with_allocator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/has_allocator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/legacy_allocator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/memory_concepts/uses_allocator.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/
   sandbox/generic/include/boost/generic/std_concept/support_concepts.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hei (contents, props changed)
   sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/support.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/test.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/type_traits/
   sandbox/generic/include/boost/generic/type_traits.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/type_traits/archetype_of.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/type_traits/concept_is_modeled_by.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/type_traits/concept_may_be_modeled_by.hpp (contents, props changed)
   sandbox/generic/include/boost/generic/type_traits/tag_of.hpp (contents, props changed)
   sandbox/generic/libs/
   sandbox/generic/project-root.jam (contents, props changed)
   sandbox/generic/test/ (props changed)
   sandbox/generic/test/libs/
   sandbox/generic/test/libs/generic/
   sandbox/generic/test/libs/generic/test/ (props changed)
   sandbox/generic/test/libs/generic/test/Jamfile (contents, props changed)
   sandbox/generic/test/libs/generic/test/archetype/
   sandbox/generic/test/libs/generic/test/archetype/null_archetype.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/basic_concept_mapping.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/concept.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/concept_map.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/
   sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/
   sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details_try.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/name_param_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/try_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/args_to_sequence.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/auto_concept_map/
   sandbox/generic/test/libs/generic/test/detail/auto_concept_map/arg_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/axiom_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept/
   sandbox/generic/test/libs/generic/test/detail/concept/arg_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept/req_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept_and_params_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept_map/
   sandbox/generic/test/libs/generic/test/detail/concept_map/arg_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept_map/body_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept_map/typedef_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/concept_sig_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/deduction_result.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/function_decl_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/global_scope_fail.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/global_scope_pass.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/is_empty.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/is_operator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/is_parenthesized.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/is_seq_nil.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/map_name_param_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/mutable_state.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/namespace.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/no_return_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/num_args.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/operator_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/ordered_iif.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/param_list.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/public_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/requires_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/seq_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/template_decl_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/this_mem_dets.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/detail/typename_details.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/
   sandbox/generic/test/libs/generic/test/std_concept/concepts/
   sandbox/generic/test/libs/generic/test/std_concept/concepts/arithmetic_like.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/callable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/convertible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_assignable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/default_constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/equality_comparable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/equivalence_relation.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/explicitly_convertible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/floating_point_like.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/free_store_allocatable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_address_of.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_comma.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_complement.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_constructor.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_dereference.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_destructor.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_equal_to.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater_equal.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less_equal.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_and.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_not.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_or.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_negate.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_not_equal_to.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postdecrement.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postincrement.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_predecrement.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_preincrement.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift_assign.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_subscript.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_swap.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_unary_plus.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/has_virtual_destructor.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/identity_of.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/integral_like.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/less_than_comparable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/lvalue_reference.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/move_assignable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/move_constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/nothrow_destructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/predicate.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/regular.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_of.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_reference.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/semiregular.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/signed_integral_like.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/strict_weak_order.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/swappable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_assignable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_default_constructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_destructible.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/true.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/concepts/unsigned_integral_like.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_emplacement_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_queue_like_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_range_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_stack_like_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/queue_like_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/range_insertion_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/container_concepts/stack_like_container.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/bidirectional_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/forward_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/input_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/output_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/random_access_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/range.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/shuffle_iterator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocatable_element.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/constructible_with_allocator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/has_allocator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/legacy_allocator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/uses_allocator.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/arithmetic_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/derived_from.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/enumeration_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/floating_point_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_constant_expression_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/literal_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/member_pointee_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/non_type_template_parameter_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/object_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/pointee_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/polymorphic_class.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/referent_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/returnable.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/same_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/scalar_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/standard_layout_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/trivial_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/union.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/value_type.cpp (contents, props changed)
   sandbox/generic/test/libs/generic/test/std_concept/support_concepts/variable_type.cpp (contents, props changed)
Properties modified:
   sandbox/generic/ (props changed)

Added: sandbox/generic/include/boost/generic/archetype.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/archetype.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_ARCHETYPE_HPP
+#define BOOST_GENERIC_ARCHETYPE_HPP
+
+
+
+#endif // BOOST_GENERIC_ARCHETYPE_HPP

Added: sandbox/generic/include/boost/generic/archetype/null_archetype.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/archetype/null_archetype.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_ARCHETYPE_NULL_ARCHETYPE_HPP
+#define BOOST_GENERIC_ARCHETYPE_NULL_ARCHETYPE_HPP
+
+namespace boost { namespace generic {
+
+struct null_archetype
+{
+ null_archetype() = delete;
+ null_archetype( null_archetype&& ) = delete;
+ null_archetype( null_archetype const& ) = delete;
+ ~null_archetype() = delete;
+ null_archetype& operator =( null_archetype&& ) = delete;
+ null_archetype& operator =( null_archetype const& ) = delete;
+};
+
+} }
+
+#endif // BOOST_GENERIC_ARCHETYPE_NULL_ARCHETYPE_HPP

Added: sandbox/generic/include/boost/generic/assert.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/assert.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,93 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_ASSERT_HPP
+#define BOOST_GENERIC_ASSERT_HPP
+
+//#include <boost/generic/detail/all_but_last_arg.hpp>
+#include <boost/generic/detail/concept_is_valid.hpp>
+#include <boost/generic/detail/instantiate.hpp>
+#include <boost/generic/detail/is_concept.hpp>
+//#include <boost/generic/detail/last_arg.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+
+#define BOOST_GENERIC_ASSERT( ... ) \
+BOOST_GENERIC_ASSERT_MSG_IMPL \
+( (__VA_ARGS__) \
+, "requires " BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_ASSERT_NOT( ... ) \
+BOOST_GENERIC_ASSERT_NOT_MSG_IMPL \
+( (__VA_ARGS__) \
+, "requires !" BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_ASSERT_MSG( ... ) \
+BOOST_GENERIC_ASSERT_MSG_IMPL \
+( ( BOOST_GENERIC_DETAIL_ALL_BUT_LAST_ARG( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_LAST_ARG( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_ASSERT_MSG_IMPL( concept_, msg ) \
+static_assert \
+( ::boost::generic::detail::is_concept \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) >::value \
+, "Boost.Generic Assert expected a concept, but instead got: " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE concept_ \
+); \
+static_assert \
+( ::boost::mpl::or_ \
+ < ::boost::mpl::not_< ::boost::generic::detail::is_concept \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) > \
+ > \
+ , ::boost::generic::detail::concept_is_valid \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) > \
+ >::value \
+, msg \
+); \
+static_assert \
+( ::boost::mpl::identity \
+ < decltype \
+ ( ::boost::generic::detail::instantiate_if_auto \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) >() \
+ ) \
+ >::type::value \
+, "This message should never be seen." \
+); \
+static_assert \
+( ::boost::mpl::identity \
+ < decltype \
+ ( ::boost::generic::detail::instantiate_map \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) >() \
+ ) \
+ >::type::value \
+, "This message should never be seen." \
+)
+
+#define BOOST_GENERIC_ASSERT_NOT_MSG_IMPL( concept_, msg ) \
+static_assert \
+( ::boost::generic::detail::is_concept \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) >::value \
+, "Boost.Generic Assert expected a concept, but instead got: " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE concept_ \
+); \
+static_assert \
+( ::boost::mpl::not_ \
+ < ::boost::mpl::and_ \
+ < ::boost::generic::detail::is_concept \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) > \
+ , ::boost::generic::detail::concept_is_valid \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_ ) > \
+ > \
+ >::value \
+, msg \
+)
+
+#endif // BOOST_GENERIC_ASSERT_HPP

Added: sandbox/generic/include/boost/generic/assert/assert_concept_may_be_modeled_by.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/assert/assert_concept_may_be_modeled_by.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_ASSERT_ASSERT_CONCEPT_MAY_BE_MODELED_BY_IMPL_BY_HPP
+#define BOOST_GENERIC_ASSERT_ASSERT_CONCEPT_MAY_BE_MODELED_BY_IMPL_BY_HPP
+
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#define BOOST_GENERIC_ASSERT_CONCEPT_MAY_BE_MODELED_BY( concept_and_params ) \
+BOOST_GENERIC_ASSERT_CONCEPT_MAY_BE_MODELED_BY_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( concept_and_params ) )
+
+// ToDo: Use BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY underneath the hood
+#define BOOST_GENERIC_ASSERT_CONCEPT_MAY_BE_MODELED_BY_IMPL( seq ) \
+static_assert \
+( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) \
+ ::impl \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, seq ) ) > \
+ ::types_are_valid::value \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) \
+ is unable to be modeled by \
+ { BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, seq ) ) } \
+ due to the following: \
+ ) \
+); \
+typename BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) \
+::impl< BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, seq ) ) > \
+::descriptive_failure::type boost_generic_detail_assert();
+
+#endif // BOOST_GENERIC_ASSERT_ASSERT_CONCEPT_MAY_BE_MODELED_BY_IMPL_BY_HPP

Added: sandbox/generic/include/boost/generic/auto_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/auto_concept.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,59 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_AUTO_CONCEPT_HPP
+#define BOOST_GENERIC_AUTO_CONCEPT_HPP
+
+#include <boost/generic/concept.hpp>
+//#include <boost/generic/concept_map.hpp>
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/namespace.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_AUTO_CONCEPT( ... ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " \
+ "To make an auto concept inside a namespace, use a namespace parameter." \
+) \
+BOOST_GENERIC_AUTO_CONCEPT_DETAIL_IMPL_ \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_DETAIL_IMPL_( namespace_dets, ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( namespace_dets ) \
+, BOOST_GENERIC_AUTO_CONCEPT_DETAIL_IMPL_NAMESPACE \
+, BOOST_GENERIC_AUTO_CONCEPT_DETAIL_NO_NAMESPACE \
+)( namespace_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_AUTO_CONCEPT_DETAIL_IMPL_NAMESPACE( namespace_dets, ... )\
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( namespace_dets ) \
+ , BOOST_GENERIC_AUTO_CONCEPT_DETAIL_VALID_NAMESPACE \
+ , BOOST_GENERIC_AUTO_CONCEPT_DETAIL_INVALID_NAMESPACE \
+ )( namespace_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_AUTO_CONCEPT_DETAIL_VALID_NAMESPACE(namespace_dets,...) \
+BOOST_GENERIC_CONCEPT_IMPL \
+( 1, namespace_dets \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS \
+ ( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) ) \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_DETAIL_INVALID_NAMESPACE(namespace_dets,...)\
+static_assert \
+( false, "Invalid namespace parameter of BOOST_GENERIC_AUTO_CONCEPT." );
+
+#define BOOST_GENERIC_AUTO_CONCEPT_DETAIL_NO_NAMESPACE( namespace_dets, ... ) \
+BOOST_GENERIC_CONCEPT_IMPL \
+( 1, namespace_dets, BOOST_GENERIC_DETAIL_CONCEPT_DETS( __VA_ARGS__ ) ) \
+
+#endif // BOOST_GENERIC_AUTO_CONCEPT_HPP

Added: sandbox/generic/include/boost/generic/auto_concept_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/auto_concept_map.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,124 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_AUTO_CONCEPT_MAP_HPP
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_HPP
+
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+#include <boost/generic/detail/auto_concept_map/arg_details.hpp>
+#include <boost/generic/detail/params_for_each.hpp>
+#include <boost/generic/detail/piecewise_concept_maps.hpp>
+#include <boost/generic/detail/template_decl.hpp>
+#include <boost/generic/detail/unique_id.hpp>
+#include <boost/generic/concept_map.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+//BOOST_GENERIC_AUTO_CONCEPT_MAP
+//( ( (class) T )
+//, ( boost::generic::std_concept::DefaultConstructible ), ( T )
+//)
+
+/*
+BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP_AUTO arguments:
+concept_in_paren_ \
+ , template_params_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+
+*/
+
+// ToDo: Remove
+#if 1
+
+// Format is template params, concept map name, concept name, the concept args
+// and then the named arguments if any
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP( template_decl_, ... ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope" ) \
+BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS( template_decl_ \
+ , __VA_ARGS__ \
+ ) \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL( arg_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( arg_dets ) \
+, BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL_ERRORS \
+, BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL_NO_ERRORS \
+)( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_TPL_DETS( arg_dets ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_CONCEPT_NAME_PARAM_DETS \
+ ( arg_dets ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_ERRORS( arg_dets ) \
+ , BOOST_GENERIC_DETAIL_UNIQUE_ID_() \
+ )
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL_ERRORS( tpl_dets, np_dets, errors \
+ , id \
+ ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS_( errors )
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL_NO_ERRORS( tpl_dets, np_dets \
+ , errors, id \
+ ) \
+namespace boost_generic_detail { \
+typedef struct \
+{ \
+ template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( tpl_dets ) > \
+ struct concept_map_impl \
+ { \
+ }; \
+} id; \
+} \
+BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP_AUTO \
+( ( BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_CONCEPT_NAME( np_dets ) ) \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( tpl_dets ) ) \
+, ( BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_CONCEPT_PARAMS( np_dets ) ) \
+, ( ::boost::mpl::true_ ) \
+, ( ::boost_generic_detail::id::concept_map_impl \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( tpl_dets ) > \
+ ) \
+)
+
+#else
+
+// Format is template params, concept map name, concept name, the concept args
+// and then the named arguments if any
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP( template_decl_, ... ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope" ) \
+BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS( template_decl_ \
+ , __VA_ARGS__ \
+ ) \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_IMPL( auto_concept_map_arg_details ) \
+namespace boost_generic_detail { \
+template< BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_TEMPLATE_PARAMS \
+ ( template_params_ ) \
+ > \
+struct concept_map_name_ \
+{ \
+}; \
+} \
+BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP_AUTO \
+( concept_in_paren_ \
+, ( BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_PARAMS( template_params_ ) ) \
+, BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+, ( ::boost::mpl::true_ ) \
+, ( concept_map_name_ \
+ < BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_ARGS( template_params_ ) > \
+ ) \
+)
+
+#endif
+
+#endif // BOOST_GENERIC_AUTO_CONCEPT_MAP_HPP

Added: sandbox/generic/include/boost/generic/concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/concept.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,584 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONCEPT_HPP
+#define BOOST_GENERIC_CONCEPT_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/and.hpp>
+#include <boost/generic/detail/concept/arg_details.hpp>
+#include <boost/generic/detail/concept/emulator.hpp>
+#include <boost/generic/detail/concept/emulator_state.hpp>
+#include <boost/generic/detail/completed_concept_map_bases.hpp>
+#include <boost/generic/detail/concept_map_template.hpp>
+#include <boost/generic/detail/concepts_are_modeled.hpp>
+//#include <boost/generic/detail/actual_typedefs_visitor.hpp>
+//#include <boost/generic/detail/deduce_typename_helper_visitor.hpp>
+//#include <boost/generic/detail/deduce_typename_visitor.hpp>
+//#include <boost/generic/detail/first_pass_type_metafun_visitor.hpp>
+//#include <boost/generic/detail/function_sequence_visitor.hpp>
+//#include <boost/generic/detail/static_assert_visitor.hpp>
+#include <boost/generic/detail/concept_impl_of.hpp>
+#include <boost/generic/detail/concept_map_template.hpp>
+#include <boost/generic/detail/instantiate.hpp>
+#include <boost/generic/detail/is_concept.hpp>
+#include <boost/generic/detail/namespace.hpp>
+#include <boost/generic/detail/type.hpp>
+//#include <boost/generic/detail/typedef_first_pass_types_visitor.hpp>
+//#include <boost/generic/detail/typename_sequence_vistor.hpp>
+//#include <boost/generic/detail/typename_visitor.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_CONCEPT( ... ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " \
+ "To make a concept inside a namespace, use a namespace parameter." \
+) \
+BOOST_GENERIC_CONCEPT_DETAIL_IMPL_ \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_CONCEPT_DETAIL_IMPL_( namespace_dets, ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( namespace_dets ) \
+, BOOST_GENERIC_CONCEPT_DETAIL_IMPL_NAMESPACE \
+, BOOST_GENERIC_CONCEPT_DETAIL_NO_NAMESPACE \
+)( namespace_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_CONCEPT_DETAIL_IMPL_NAMESPACE( namespace_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( namespace_dets ) \
+ , BOOST_GENERIC_CONCEPT_DETAIL_VALID_NAMESPACE \
+ , BOOST_GENERIC_CONCEPT_DETAIL_INVALID_NAMESPACE \
+ )( namespace_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_CONCEPT_DETAIL_VALID_NAMESPACE(namespace_dets,...) \
+BOOST_GENERIC_CONCEPT_IMPL \
+( 0, namespace_dets \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS \
+ ( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) ) \
+)
+
+#define BOOST_GENERIC_CONCEPT_DETAIL_INVALID_NAMESPACE(namespace_dets,...) \
+static_assert \
+( false, "Invalid namespace parameter of BOOST_GENERIC_CONCEPT." );
+
+#define BOOST_GENERIC_CONCEPT_DETAIL_NO_NAMESPACE( namespace_dets, ... ) \
+BOOST_GENERIC_CONCEPT_IMPL \
+( 0, namespace_dets, BOOST_GENERIC_DETAIL_CONCEPT_DETS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_CONCEPT_IMPL( auto_concept_bit, namespace_dets, dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_CONCEPT_IMPL_VALID \
+ , BOOST_GENERIC_CONCEPT_IMPL_INVALID \
+ )( auto_concept_bit, namespace_dets, dets )
+
+#define BOOST_GENERIC_CONCEPT_IMPL_VALID( auto_concept_bit, namespace_dets \
+ , dets \
+ ) \
+BOOST_GENERIC_CONCEPT_IMPL_VALID_ \
+( auto_concept_bit \
+, namespace_dets \
+, dets \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS_FOLD_BODY \
+ ( dets, BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMPTY_EMULATOR_STATE() \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME( r, data, elem ) \
+typename data::elem,
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_TYPENAMES_MAC( r, data, elem ) \
+typedef typename data::elem elem;
+
+#define BOOST_GENERIC_DETAIL_INSTANTIATE_IF_AUTO( dets ) \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+decltype \
+( boost_generic_detail_instantiate \
+ ( ::std::declval \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ >() \
+ ) \
+) \
+boost_generic_detail_instantiate_if_auto \
+( ::boost::generic::detail::type_ \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > \
+);
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_DEDUCERS_MAC( r, num_funs, name ) \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+ : BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_deduce_, num_funs, name ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > {};
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEF_MAC( r, data, name ) \
+typedef typename ::boost::mpl::eval_if \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_first_pass \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, data ) )\
+ >::name \
+ > \
+ , BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ , name \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, data ) )\
+ > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM( 1, data ) ) \
+ > \
+ > \
+ , ::boost::mpl::identity \
+ < typename boost_generic_detail_first_pass \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, data ) )\
+ >::name \
+ > \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_ARE_VALID_0_WITH_PARENTS( dets ) \
+template< class, class, class, class = void > \
+struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ , class BoostGenericDetailTypenames \
+ > \
+struct boost_generic_detail_requires_are_valid_0 \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ , BoostGenericDetailTypenames \
+ , typename ::boost::generic::detail::always_void \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS( dets ) >::type \
+ > \
+ : ::boost::generic::detail::concepts_are_modeled \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS( dets ) \
+ > {};
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_ARE_VALID_0_NO_PARENTS( dets ) \
+template< class, class, class > \
+struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {};
+
+#define BOOST_GENERIC_DETAIL_COMPLETED_MAP_BASES_WITH_PARENTS( dets ) \
+ : virtual boost::generic::detail::completed_concept_map_bases \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS( dets ) \
+ >
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_PARENT_ASSERTS( dets ) \
+static_assert \
+( ::boost::mpl::identity \
+ < decltype \
+ ( ::boost::generic::detail::instantiate \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS( dets ) >() \
+ ) \
+ >::type::value \
+, "This message should never be seen." \
+);
+
+#define BOOST_GENERIC_DETAIL_EMPTY_AUTO_CONCEPT_MAP( namespace_dets, dets ) \
+namespace boost_generic_concept_map_detail { \
+ \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+struct concept_map_ \
+ < ::BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE \
+ ( namespace_dets ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME_AND_ARGS( dets ) \
+ > \
+{ \
+ static bool const is_auto_concept_definition = true, is_usable = true; \
+ \
+ struct boost_generic_concept_map_impl {}; \
+ \
+ template< class BoostGenericDetailDummy = void > \
+ struct instantiate \
+ { \
+ typedef decltype \
+ ( ::boost::generic::detail::instantiate_with_dummy \
+ < BoostGenericDetailDummy \
+ , ::BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE \
+ ( namespace_dets ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ >() \
+ ) instantiate_; \
+ }; \
+}; \
+ \
+}
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_DEDUCERS_IMPL( num_funs, typename_seq ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+( BOOST_GENERIC_DETAIL_ACTUAL_DEDUCERS_MAC, num_funs, typename_seq )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_TYPENAMES_IMPL( typename_seq ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+( BOOST_GENERIC_DETAIL_TYPEDEF_TYPENAMES_MAC \
+, boost_generic_detail_completed_concept_map \
+, typename_seq \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_IMPL( typename_seq ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+( BOOST_GENERIC_DETAIL_THIS_TYPENAME \
+, boost_generic_detail_completed_concept_map_ \
+, typename_seq \
+)
+
+#define BOOST_GENERIC_CONCEPT_IMPL_VALID_( auto_concept_bit, namespace_dets \
+ , dets, state \
+ ) \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE( namespace_dets ) \
+ \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+class BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ); \
+ \
+namespace boost_generic_concept_impl_detail { \
+struct BOOST_PP_CAT( boost_generic_detail_concept_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ ) \
+{ \
+ struct boost_generic_detail_tag \
+ { \
+ static bool const is_auto_concept = auto_concept_bit == 1; \
+ }; \
+ \
+ template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+ struct boost_generic_detail_params; \
+ \
+ template< class BoostGenericDetailConceptAndParams > \
+ struct boost_generic_detail_params_from_concept; \
+ \
+ template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+ struct boost_generic_detail_params_from_concept \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > \
+ { typedef boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > type; \
+ }; \
+ \
+ BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) \
+ , BOOST_GENERIC_DETAIL_REQUIRES_ARE_VALID_0_WITH_PARENTS \
+ , BOOST_GENERIC_DETAIL_REQUIRES_ARE_VALID_0_NO_PARENTS \
+ )( dets ) \
+ \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPE_METAFUNCTIONS \
+ ( state ) \
+ \
+ template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ > \
+ struct boost_generic_detail_first_pass \
+ { \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPEDEFS( state ) \
+ }; \
+ \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ \
+ BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_ACTUAL_DEDUCERS_IMPL \
+ )( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ ) \
+ \
+ template< class, class > \
+ struct boost_generic_detail_is_valid_; \
+ \
+ template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams \
+ , class = void \
+ > \
+ struct boost_generic_detail_parent_concepts \
+ { \
+ typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; \
+ }; \
+ \
+ template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ > \
+ struct boost_generic_detail_parent_concepts \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ , typename ::boost::generic::detail::always_void \
+ < BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets ) \
+ >::type \
+ > \
+ BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) \
+ , BOOST_GENERIC_DETAIL_COMPLETED_MAP_BASES_WITH_PARENTS \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets ) \
+ { \
+ typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; \
+ }; \
+ \
+ template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ > \
+ struct boost_generic_detail_completed_concept_map \
+ : boost_generic_detail_parent_concepts \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > \
+ { \
+ private: \
+ typedef boost_generic_detail_first_pass \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+ > boost_generic_detail_typename_deducers; \
+ \
+ typedef boost_generic_detail_completed_concept_map \
+ BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ); \
+ public: \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY \
+ ( state, BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ) ) \
+ private: \
+ template< class, class > \
+ friend struct boost_generic_detail_is_valid_; \
+ \
+ typedef boost_generic_detail_completed_concept_map \
+ boost_generic_detail_completed_concept_map_; \
+ \
+ typedef boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ boost_generic_detail_params_; \
+ \
+ typedef ::boost::generic::detail::type_list \
+ < BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS \
+ ( state ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_THIS_TYPENAME_IMPL \
+ )( ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS \
+ ( state ) \
+ ) \
+ ) \
+ void \
+ > \
+ boost_generic_detail_typenames; \
+ public: \
+ struct boost_generic_detail_is_valid \
+ : ::boost::generic::detail::and_ \
+ < typename boost_generic_detail_completed_concept_map \
+ ::boost_generic_detail_parent_sub_succeeded \
+ , BOOST_PP_CAT \
+ ( boost_generic_detail_requires_are_valid_ \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) \
+ )< boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ > \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS\
+ ( state ) \
+ > {}; \
+ }; \
+ \
+ template< class, class > \
+ struct boost_generic_detail_completed_concept_map_from_concept; \
+ \
+ template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ > \
+ struct boost_generic_detail_completed_concept_map_from_concept \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > \
+ { \
+ typedef boost_generic_detail_completed_concept_map \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+ > type; \
+ }; \
+ \
+ template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+ , class BoostGenericDetailConceptMap \
+ > \
+ struct boost_generic_detail_is_valid_ \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ , BoostGenericDetailConceptMap \
+ > \
+ : boost_generic_detail_completed_concept_map \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+ >::boost_generic_detail_is_valid {}; \
+ \
+ template< class BoostGenericDetailConceptAndParams \
+ , class BoostGenericDetailConceptMap \
+ = typename ::boost_generic_concept_map_detail::concept_map_ \
+ < BoostGenericDetailConceptAndParams > \
+ ::boost_generic_concept_map_impl \
+ > \
+ struct boost_generic_detail_is_valid \
+ : boost_generic_detail_is_valid_ \
+ < BoostGenericDetailConceptAndParams \
+ , BoostGenericDetailConceptMap \
+ >::type {}; \
+}; \
+} \
+ \
+typedef boost_generic_concept_impl_detail:: \
+ BOOST_PP_CAT( boost_generic_detail_concept_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ ) \
+ BOOST_PP_CAT( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ , BoostGenericDetailImpl \
+ ); \
+ \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+class BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ : boost_generic_concept_impl_detail:: \
+ BOOST_PP_CAT( boost_generic_detail_concept_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ ):: \
+ boost_generic_detail_completed_concept_map \
+ < typename ::boost_generic_concept_map_detail::concept_map_ \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME_AND_ARGS( dets ) > \
+ ::boost_generic_concept_map_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+ > \
+{ \
+ typedef boost_generic_concept_impl_detail:: \
+ BOOST_PP_CAT( boost_generic_detail_concept_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ ) \
+ boost_generic_detail_concept_impl; \
+ \
+ typedef typename boost_generic_detail_concept_impl::template \
+ boost_generic_detail_completed_concept_map \
+ < typename ::boost_generic_concept_map_detail::concept_map_ \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME_AND_ARGS( dets ) >\
+ ::boost_generic_concept_map_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+ > \
+ boost_generic_detail_completed_concept_map; \
+ \
+ typedef boost_generic_detail_concept_impl::boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ boost_generic_detail_params; \
+ \
+ struct parent_concept_asserts_substitution_failure { struct instantiate; }; \
+ \
+ struct parent_concept_asserts \
+ { \
+ struct instantiate; \
+ \
+ BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_PARENT_ASSERTS \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets ) \
+ }; \
+ \
+ typedef typename ::std::conditional \
+ < boost_generic_detail_completed_concept_map \
+ ::boost_generic_detail_parent_sub_succeeded::value \
+ , parent_concept_asserts \
+ , parent_concept_asserts_substitution_failure \
+ >::type::instantiate parent_concept_asserts_; \
+ \
+ static_assert( boost_generic_detail_completed_concept_map \
+ ::boost_generic_detail_parent_sub_succeeded::value \
+ , "parameters unable to be substituted into parent concepts " \
+ "(guess: doing so may form a reference to void)." \
+ ); \
+public: \
+ BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_TYPENAMES_IMPL \
+ )( ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) ) \
+private: \
+ typedef ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS \
+ ( state ) \
+ ) \
+ ) \
+ ) \
+ void \
+ > \
+ boost_generic_detail_typenames; \
+ \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+}; \
+ \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE( namespace_dets ) \
+ \
+namespace boost { namespace generic { namespace detail { \
+ \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+struct is_concept \
+ < ::BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE \
+ ( namespace_dets ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > : mpl::true_ {}; \
+ \
+template< BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) > \
+struct concept_impl_of \
+ < ::BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE \
+ ( namespace_dets ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ < BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) > \
+ > \
+{ \
+ static bool const is_specialized = false; \
+ static bool const is_auto = auto_concept_bit; \
+ \
+ typedef ::BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE \
+ ( namespace_dets ) \
+ boost_generic_concept_impl_detail:: \
+ BOOST_PP_CAT( boost_generic_detail_concept_impl \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+ ) \
+ type; \
+}; \
+ \
+} } } \
+ \
+BOOST_PP_IIF( auto_concept_bit \
+ , BOOST_GENERIC_DETAIL_EMPTY_AUTO_CONCEPT_MAP \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( namespace_dets, dets )
+
+#endif // BOOST_GENERIC_CONCEPT_HPP

Added: sandbox/generic/include/boost/generic/concept_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/concept_map.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,104 @@
+/*==============================================================================
+ Copyright (c) 2010, 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONCEPT_MAP_HPP
+#define BOOST_GENERIC_CONCEPT_MAP_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/mpl/identity.hpp>
+#endif
+
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+#include <boost/generic/detail/concept_is_valid.hpp>
+#include <boost/generic/detail/concept_map/arg_dets.hpp>
+#include <boost/generic/detail/concept_map/body_dets.hpp>
+#include <boost/generic/detail/concept_map/concept_and_params_dets.hpp>
+#include <boost/generic/detail/concept_map/map_specifier_visitor.hpp>
+#include <boost/generic/detail/concept_map_template.hpp>
+#include <boost/generic/detail/instantiate.hpp>
+#include <boost/generic/detail/template_decl_details.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+#include <boost/generic/detail/wrap.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_CONCEPT_MAP( ... ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope." ) \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID \
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_INVALID \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_ASSERT( dets ) \
+static_assert \
+( ::boost::generic::detail::concept_is_valid \
+ < BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS( dets ) > \
+ ::value \
+, "Concept map does not satisfy the following requirements: " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_AFTER_RESCAN \
+ ( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS( dets ) ) \
+); \
+ \
+static_assert \
+( ::boost::mpl::identity \
+ < decltype \
+ ( ::boost::generic::detail::instantiate \
+ < BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS( dets ) > \
+ () \
+ ) \
+ >::type::value \
+, "This message should never be seen." \
+);
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID( dets ) \
+namespace boost_generic_concept_map_detail { \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID \
+ ( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS( dets ) ) \
+, BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_MAKE_TEMPLATE \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( template<> ) \
+)( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS( dets ) ) \
+struct concept_map_ \
+ < BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS( dets ) >\
+{ \
+ static bool const is_auto_concept_definition = false, is_usable = true; \
+ \
+ struct boost_generic_concept_map_impl \
+ { \
+ BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_VISIT_BODY \
+ ( dets, BOOST_GENERIC_DETAIL_MAP_SPECIFIER, ~ ) \
+ }; \
+ \
+ template< class BoostGenericDetailDummy = void > \
+ struct instantiate \
+ { \
+ typedef decltype \
+ ( ::boost::generic::detail::instantiate_with_dummy \
+ < BoostGenericDetailDummy \
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS \
+ ( dets ) \
+ >() \
+ ) instantiate_; \
+ }; \
+}; \
+ \
+} \
+ \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID \
+ ( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS( dets ) ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_ASSERT \
+)( dets )
+
+#endif // BOOST_GENERIC_CONCEPT_MAP_HPP

Added: sandbox/generic/include/boost/generic/config.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/config.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONFIG_HPP
+#define BOOST_GENERIC_CONFIG_HPP
+
+#include <boost/generic/config/compiler.hpp>
+#include <boost/generic/config/emulate_concepts.hpp>
+#include <boost/generic/config/std_lib.hpp>
+
+#endif // BOOST_GENERIC_CONFIG_HPP

Added: sandbox/generic/include/boost/generic/config/compiler.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/config/compiler.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,18 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONFIG_COMPILER_HPP
+#define BOOST_GENERIC_CONFIG_COMPILER_HPP
+
+// ToDo: Make this file detect the compiler and if it has a concept extension
+
+// For now, assume no concept support is present unless the user says so
+#define BOOST_GENERIC_COMPILER_HAS_CONCEPTS() \
+defined( BOOST_GENERIC_FORCE_COMPILER_HAS_CONCEPTS )
+
+#endif // BOOST_GENERIC_CONFIG_COMPILER_HPP

Added: sandbox/generic/include/boost/generic/config/emulate_concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/config/emulate_concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONFIG_CONCEPT_SUPPORT_HPP
+#define BOOST_GENERIC_CONFIG_CONCEPT_SUPPORT_HPP
+
+#include <boost/generic/config/compiler.hpp>
+
+#if defined( BOOST_GENERIC_FORCE_CONCEPT_EMULATION ) \
+ || !BOOST_GENERIC_COMPILER_HAS_CONCEPTS()
+
+#define BOOST_GENERIC_EMULATE_CONCEPTS() 1
+
+#else
+
+#define BOOST_GENERIC_EMULATE_CONCEPTS() 0
+
+#endif
+
+#endif // BOOST_GENERIC_CONFIG_CONCEPT_SUPPORT_HPP

Added: sandbox/generic/include/boost/generic/config/std_lib.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/config/std_lib.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,181 @@
+/*==============================================================================
+ Copyright (c) 2010 - 2011 Matt Calabrese
+ 2001 - 2003 John Maddock
+ 2001 - 2002 Jens Maurer
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONFIG_STD_LIB_HPP
+#define BOOST_GENERIC_CONFIG_STD_LIB_HPP
+
+#include <boost/generic/detail/nary_cat.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// The detectable configurations. Format is:
+// (unique_value)(cstring_name)(if_supported_bit)
+#define BOOST_GENERIC_STD_LIB_unknown (0)("unknown standard library")(0)
+#define BOOST_GENERIC_STD_LIB_stl_port (1)("STL Port")(0)
+#define BOOST_GENERIC_STD_LIB_comeau (2)("Comeau STL")(0)
+#define BOOST_GENERIC_STD_LIB_rogue_wave (3)("Rogue Wave")(0)
+#define BOOST_GENERIC_STD_LIB_libcpp (4)("libc++")(0)
+#define BOOST_GENERIC_STD_LIB_libstdcpp (5)("libstdc++")(1)
+#define BOOST_GENERIC_STD_LIB_sgi (6)("SGI STL")(0)
+#define BOOST_GENERIC_STD_LIB_msl (7)("MSL")(0)
+#define BOOST_GENERIC_STD_LIB_vacpp (8)("VACPP")(0)
+#define BOOST_GENERIC_STD_LIB_modena (9)("Modena")(0)
+#define BOOST_GENERIC_STD_LIB_dinkumware (10)("Dinkumware")(0)
+
+// Yields the ID of the detected standard library
+#define BOOST_GENERIC_STD_LIB_ID() \
+BOOST_GENERIC_STD_LIB_ID_OF( BOOST_GENERIC_STD_LIB )
+
+// Yields the name of the detected standard library (as a c-string)
+#define BOOST_GENERIC_STD_LIB_NAME() \
+BOOST_GENERIC_STD_LIB_NAME_OF( BOOST_GENERIC_STD_LIB )
+
+// Yields 1 if a specific standard library was detected, else 0
+#define BOOST_GENERIC_STD_LIB_IS_KNOWN() \
+BOOST_PP_BOOL( BOOST_GENERIC_STD_LIB_ID() )
+
+// Yields an integer identifier of a specified standard library
+#define BOOST_GENERIC_STD_LIB_ID_OF( name ) \
+BOOST_PP_SEQ_ELEM( 0, BOOST_PP_CAT( BOOST_GENERIC_STD_LIB_, name ) )
+
+// Yields the name of a specified standard library (as a c-string)
+#define BOOST_GENERIC_STD_LIB_NAME_OF( name ) \
+BOOST_PP_SEQ_ELEM( 1, BOOST_PP_CAT( BOOST_GENERIC_STD_LIB_, name ) )
+
+// Yields a 1 if the current detected standard library is supported, else 0
+#define BOOST_GENERIC_STD_LIB_IS_SUPPORTED() \
+BOOST_PP_SEQ_ELEM \
+( 2 \
+, BOOST_PP_CAT( BOOST_GENERIC_STD_LIB_, BOOST_GENERIC_STD_LIB ) \
+)
+
+// Yields 1 if the detected standard library matches the parameter, else 0
+#define BOOST_GENERIC_STD_LIB_IS( name ) \
+BOOST_PP_EQUAL( BOOST_GENERIC_STD_LIB_ID() \
+ , BOOST_GENERIC_STD_LIB_ID_OF( name ) \
+ )
+
+// Yields a compiler error if the detected standard library is not supported
+#define BOOST_GENERIC_ASSERT_STD_LIB_IS_NOT_SUPPORTED() \
+static_assert( false, "Standard library: " BOOST_GENERIC_STD_LIB_NAME() \
+ " is not supported by Boost.Generic." \
+ );
+
+// Yields 1 if concepts are to be emulated, else 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_EMULATE_CONCEPTS() \
+BOOST_PP_BITOR \
+( defined( BOOST_GENERIC_FORCE_CONCEPT_EMULATION ) \
+, BOOST_PP_CAT( BOOST_GENERIC_CONFIG_STD_LIB_EMULATE_CONCEPTS_ \
+ , BOOST_GENERIC_STD_LIB \
+ ) \
+)
+
+// Yields 1 if an std::array iterator is a raw pointer, else 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_ARRAY_ITERATOR_IS_POINTER() \
+BOOST_PP_CAT( BOOST_GENERIC_CONFIG_STD_LIB_ARRAY_ITERATOR_IS_POINTER_ \
+ , BOOST_GENERIC_STD_LIB \
+ )
+
+// Yields 1 if an std::vector iterator is a raw pointer, else 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_POINTER() \
+BOOST_PP_CAT( BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_POINTER_ \
+ , BOOST_GENERIC_STD_LIB \
+ )
+
+// Yields 1 if an std::array iterator and std::vector iterator are the same,
+// else 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_ARRAY_ITERATOR() \
+BOOST_PP_CAT( BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_ARRAY_ITERATOR_ \
+ , BOOST_GENERIC_STD_LIB \
+ )
+
+// Yields the config header
+#define BOOST_GENERIC_CONFIG_STD_LIB_HEADER() \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( <boost/generic/config/std_lib/detail/_, BOOST_GENERIC_STD_LIB, _.hpp> )
+
+// If the user explicitly specified a standard library, use that
+// ToDo: Gracefully handle when a user specifies a name that we don't recognize
+#ifndef BOOST_GENERIC_STD_LIB
+
+// First include <cstddef> to determine if some version of STLport is in use as
+// the std lib (do not rely on this header being included since users can
+// short-circuit this header if they know whose std lib they are using.)
+#include <cstddef>
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+// STLPort library; this _must_ come first, otherwise since
+// STLport typically sits on top of some other library, we
+// can end up detecting that first rather than STLport:
+#define BOOST_GENERIC_STD_LIB stl_port
+
+#else
+
+// If our std lib was not some version of STLport, then include <utility> as it
+// is about the smallest of the std lib headers that includes real C++ stuff.
+// (Some std libs do not include their C++-related macros in <cstddef> so this
+// additional include makes sure we get those definitions)
+// (again do not rely on this header being included since users can
+// short-circuit this header if they know whose std lib they are using.)
+#include <boost/config/no_tr1/utility.hpp>
+
+#if defined(__LIBCOMO__)
+// Comeau STL:
+#define BOOST_GENERIC_STD_LIB comeau
+
+#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// Rogue Wave library:
+#define BOOST_GENERIC_STD_LIB rogue_wave
+
+#elif defined(_LIBCPP_VERSION)
+// libc++
+#define BOOST_GENERIC_STD_LIB libcpp
+
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+// GNU libstdc++ 3
+#define BOOST_GENERIC_STD_LIB libstdcpp
+
+#elif defined(__STL_CONFIG_H)
+// generic SGI STL
+#define BOOST_GENERIC_STD_LIB sgi
+
+#elif defined(__MSL_CPP__)
+// MSL standard lib:
+#define BOOST_GENERIC_STD_LIB msl
+
+#elif defined(__IBMCPP__)
+// take the default VACPP std lib
+#define BOOST_GENERIC_STD_LIB vacpp
+
+#elif defined(MSIPL_COMPILE_H)
+// Modena C++ standard library
+#define BOOST_GENERIC_STD_LIB modena
+
+#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Dinkumware Library (has to appear after any possible replacement libraries):
+#define BOOST_GENERIC_STD_LIB dinkumware
+
+#else
+// Unknown standard library
+#define BOOST_GENERIC_STD_LIB unknown
+
+#endif // End standard library checks
+
+#endif // End STL Port check
+
+#endif // End check for explicit standard library specification
+
+// Include the standard-library-specific config information
+#include BOOST_GENERIC_CONFIG_STD_LIB_HEADER()
+
+#endif // BOOST_GENERIC_CONFIG_STD_LIB_HPP

Added: sandbox/generic/include/boost/generic/config/std_lib/detail/_libstdcpp_.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/config/std_lib/detail/_libstdcpp_.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_CONFIG_STD_LIB_DETAIL_LIBSTDCPP_HPP
+#define BOOST_GENERIC_CONFIG_STD_LIB_DETAIL_LIBSTDCPP_HPP
+
+#define BOOST_GENERIC_CONFIG_STD_LIB_EMULATE_CONCEPTS_libstdcpp 1
+#define BOOST_GENERIC_CONFIG_STD_LIB_ARRAY_ITERATOR_IS_POINTER_libstdcpp 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_POINTER_libstdcpp 0
+#define BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_ARRAY_ITERATOR_libstdcpp 1
+
+#endif // BOOST_GENERIC_CONFIG_STD_LIB_DETAIL_LIBSTDCPP_HPP

Added: sandbox/generic/include/boost/generic/detail/128_args.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/128_args.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_128_ARGS_HPP
+#define BOOST_GENERIC_DETAIL_128_ARGS_HPP
+
+// Yields 128 comma-separated tokens
+#define BOOST_GENERIC_DETAIL_128_ARGS() \
+ _00,_01,_02,_03,_04,_05,_06,_07,_08,_09,_0a,_0b,_0c,_0d,_0e,_0f \
+,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_1a,_1b,_1c,_1d,_1e,_1f \
+,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_2a,_2b,_2c,_2d,_2e,_2f \
+,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_3a,_3b,_3c,_3d,_3e,_3f \
+,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_4a,_4b,_4c,_4d,_4e,_4f \
+,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_5a,_5b,_5c,_5d,_5e,_5f \
+,_60,_61,_62,_63,_64,_65,_66,_67,_68,_69,_6a,_6b,_6c,_6d,_6e,_6f \
+,_70,_71,_72,_73,_74,_75,_76,_77,_78,_79,_7a,_7b,_7c,_7d,_7e,_7f
+
+// Yields 256 comma-separated tokens
+#define BOOST_GENERIC_DETAIL_256_ARGS() \
+ _00,_01,_02,_03,_04,_05,_06,_07,_08,_09,_0a,_0b,_0c,_0d,_0e,_0f \
+,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_1a,_1b,_1c,_1d,_1e,_1f \
+,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_2a,_2b,_2c,_2d,_2e,_2f \
+,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_3a,_3b,_3c,_3d,_3e,_3f \
+,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_4a,_4b,_4c,_4d,_4e,_4f \
+,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_5a,_5b,_5c,_5d,_5e,_5f \
+,_60,_61,_62,_63,_64,_65,_66,_67,_68,_69,_6a,_6b,_6c,_6d,_6e,_6f \
+,_70,_71,_72,_73,_74,_75,_76,_77,_78,_79,_7a,_7b,_7c,_7d,_7e,_7f \
+,_80,_81,_82,_83,_84,_85,_86,_87,_88,_89,_8a,_8b,_8c,_8d,_8e,_8f \
+,_90_,11,_92,_93,_94,_95,_96,_97,_98,_99,_9a,_9b,_9c,_9d,_9e,_9f \
+,_a0,_a1,_a2,_a3,_a4,_a5,_a6,_a7,_a8,_a9,_aa,_ab,_ac,_ad,_ae,_af \
+,_b0,_b1,_b2,_b3,_b4,_b5,_b6,_b7,_b8,_b9,_ba,_bb,_bc,_bd,_be,_bf \
+,_c0,_c1,_c2,_c3,_c4,_c5,_c6,_c7,_c8,_c9,_ca,_cb,_cc,_cd,_ce,_cf \
+,_d0,_d1,_d2,_d3,_d4,_d5,_d6,_d7,_d8,_d9,_da,_db,_dc,_dd,_de,_df \
+,_e0,_e1,_e2,_e3,_e4,_e5,_e6,_e7,_e8,_e9,_ea,_eb,_ec,_ed,_ee,_ef \
+,_f0,_f1,_f2,_f3,_f4,_f5,_f6,_f7,_f8,_f9,_fa,_fb,_fc,_fd,_fe,_ff
+
+#endif // BOOST_GENERIC_DETAIL_128_ARGS_HPP

Added: sandbox/generic/include/boost/generic/detail/actual_typedefs_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/actual_typedefs_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,86 @@
+#ifndef BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFS_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFS_VISITOR_HPP
+
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSrequires( ... )
+
+// d here is:
+// concept_param_dets
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFStypename( i, d, name, default_ ) \
+typedef typename ::boost::mpl::eval_if \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_typename_deducers::name > \
+ , typename boost_generic_detail_typename_deducers::template \
+ BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( d ) > \
+ , ::boost::mpl::identity \
+ < typename boost_generic_detail_typename_deducers::name > \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSconstrained_typename( i, d \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFStypename( i, d, name, default_ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSmember_typename( i, d, this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSconstrained_member_typename( \
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFScall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFScomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSsubscript_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFSexplicit_conversion( ... )
+
+#endif // BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEFS_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/ad_hoc_concept/arg_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/ad_hoc_concept/arg_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,575 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_HPP
+
+#include <boost/generic/detail/array_to_seq.hpp>
+#include <boost/generic/detail/ad_hoc_concept/name_param_details.hpp>
+#include <boost/generic/detail/is_conditional_arg.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/is_recognized_arg.hpp>
+#include <boost/generic/detail/param.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/generic/detail/param_id_category.hpp>
+#include <boost/generic/detail/param_id_category_value.hpp>
+#include <boost/generic/detail/param_id_implies_parentheses.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/array/elem.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/array/size.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS( ... ) \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL( name_param_dets ) \
+BOOST_PP_IF \
+( BOOST_PP_ARRAY_SIZE \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( name_param_dets ) )\
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_NAME_PARAM_ERRORS \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_NO_NAME_PARAM_ERROR \
+)( name_param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_NO_NAME_PARAM_ERROR( \
+ name_param_dets\
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_REMAINING_ARGS \
+ ( name_param_dets ) \
+ ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARGUMENT_DETAILS_CHECK_ARGS \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_EMPTY \
+)( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( name_param_dets ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( name_param_dets ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_PARAM_LIST_DETS \
+ ( name_param_dets ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_CURR_ARG_NUM \
+ ( name_param_dets ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_REMAINING_ARGS \
+ ( name_param_dets ) BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PARAM_CATEGORY_BIT_TABLE_EMPTY() \
+BOOST_PP_REPEAT \
+( BOOST_GENERIC_DETAIL_NUM_PARAM_CATEGORIES \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO \
+, ~ \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO( \
+ z, n, t\
+ ) \
+((0))
+
+// State is a sequence of:
+// A bit specifying if a fatal error was encountered
+// (in which case we don't try to parse any more arguments)
+//
+// The concept name
+//
+// The concept param list details
+//
+// A value specifying the current argument number
+//
+// A sequence of sequences of category info where the first element is a
+// bit that specifies whether or not the category was encountered. If and
+// only if the first element is 1, there is a second element which
+// specifies the line number where the first occurrence of the category
+// appeared
+//
+// An array of sequences of analyzed conditional arguments of the form:
+// (param_id_without_spaces)(param_without_id_in_paren)
+//
+// public category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// for category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// for typedef category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// An array of errors
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARGUMENT_DETAILS_CHECK_ARGS( errors \
+ , name \
+ , param_dets \
+ , curr_arg_num \
+ , remaining_args \
+ ) \
+BOOST_PP_SEQ_FOLD_LEFT \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARGUMENT_DETAILS_MACRO \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_EMPTY \
+ ( errors, name, param_dets, curr_arg_num, remaining_args ) \
+, remaining_args() \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_IMPL_EMPTY( errors \
+ , name \
+ , param_dets \
+ , curr_arg_num \
+ , remaining_args \
+ ) \
+( 0 ) \
+( name ) \
+( param_dets ) \
+( curr_arg_num ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PARAM_CATEGORY_BIT_TABLE_EMPTY() ) \
+( ( 0, () ) ) \
+( ( 0 ) ( ~ ) ( ~ ) ) \
+( ( 0 ) ( ~ ) ( ~ ) ) \
+( ( 0 ) ( ~ ) ( ~ ) ) \
+( ( 0, () ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+BOOST_PP_SEQ_ELEM( 4, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) \
+BOOST_PP_SEQ_ELEM( 5, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_CONDITIONAL_ARGS( state ) \
+BOOST_PP_BOOL \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NUM_CONDITIONAL_ARGS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NUM_CONDITIONAL_ARGS( state ) \
+BOOST_PP_ARRAY_SIZE \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS_AS_SEQ( state ) \
+BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_SPACED_ID( \
+ state \
+ , n \
+ ) \
+BOOST_GENERIC_DETAIL_SPACED_ID \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_ID( state, n ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_ID( state, n ) \
+BOOST_PP_SEQ_ELEM \
+( 0, BOOST_PP_ARRAY_ELEM \
+ ( n, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_PARAM(state,n) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( 1, BOOST_PP_ARRAY_ELEM \
+ ( n, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_X_PARAM( state \
+ , n, x \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( x \
+ , BOOST_GENERIC_DETAIL_SEQ_TO_SEQ \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARG_N_PARAM \
+ ( state, n ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) \
+BOOST_PP_SEQ_ELEM( 6, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_PUBLIC_CATEGORY( state ) \
+BOOST_PP_SEQ_HEAD( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC_PARAM_ID( state ) \
+BOOST_PP_SEQ_ELEM( 1, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC_PARAM( state ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( 2, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) \
+BOOST_PP_SEQ_ELEM( 7, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_CATEGORY( state ) \
+BOOST_PP_SEQ_HEAD( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_PARAM_ID( state ) \
+BOOST_PP_SEQ_ELEM( 1, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_PARAM( state ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM( 2, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) \
+BOOST_PP_SEQ_ELEM( 8, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_TYPEDEF_CATEGORY( state )\
+BOOST_PP_SEQ_HEAD( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF_PARAM_ID( state ) \
+BOOST_PP_SEQ_ELEM \
+( 1, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF_PARAM( state ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( 2, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+BOOST_PP_SEQ_ELEM( 9, state )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_ERRORS( state ) \
+BOOST_PP_BOOL \
+( BOOST_PP_ARRAY_SIZE( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) ) )
+
+// state is described above
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARGUMENT_DETAILS_MACRO( s, state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_FORWARD_FATAL_ERROR \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NOT_PARENTHESIZED \
+ ) \
+)( state, elem )
+
+// Checks starting after it is established that the argument is parenthesized
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_PARENTHESIZED( state \
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( elem ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_RECOGNIZED \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_UNRECOGNIZED_ARG \
+)( state, elem )
+
+// Checks starting after we have recognized the parameter kind
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_RECOGNIZED( state, elem )\
+BOOST_PP_IIF \
+( BOOST_NO_BOOST_GENERIC_CONCEPT_PARAM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NO_SUPPORT_INFO \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_SUPPORTED \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_CHANGE_IN_ERRORS( state ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) )
+
+// Invoked when no error is found (updates line counter, categories, and args)
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT( state, elem ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PUSH_BACK_IF_CONDITIONAL \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ), elem ) \
+) \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PUSH_BACK_IF_CONDITIONAL( array, elem ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PUSH_BACK_IF_CONDITIONAL_IMPL \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( array ) \
+ )( array, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_PUSH_BACK_IF_CONDITIONAL_IMPL( array \
+ , elem \
+ ) \
+BOOST_PP_ARRAY_PUSH_BACK \
+( array \
+, ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA( state \
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( public ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_PUBLIC \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_PUBL \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_PUBLIC( \
+ state \
+ , elem \
+ ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_PUBL( \
+ state\
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( for () ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_FOR \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_FOR \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_FOR( state\
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_FOR( \
+ state\
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( for typedef ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_FOR_T \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_FOR_T \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_FOR_T( \
+ state \
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_FOR_T(\
+ state\
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) )
+
+// Update the fold state when we hit an argument that should take a sequence but
+// it is detected that the argument does not have parentheses
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_ARG_NOT_PAREN_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_ARG_ARG_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ) \
+)
+
+// Update the fold state when we hit an argument that duplicates a category that
+// was already encountered
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_DUPLICATE_CATEGORY_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_MULTIPLE_OF_CATEGORY \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) \
+ , BOOST_PP_SEQ_ELEM \
+ ( 1 \
+ , BOOST_PP_SEQ_ELEM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+ ) \
+ ) \
+ ) \
+ ) \
+)
+
+// Update the fold state when we hit an argument that wasn't parenthesized
+// An argument that isn't parenthesized is a fatal error and we can't parse
+// anything after that since we can't know whether or not commas there are
+// intended to end that argument or if they are supposed to be a part of that
+// argument
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NOT_PARENTHESIZED( state, elem ) \
+( 1 )( ~ )( ~ )( ~ )( ~ )( ~ ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NOT_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ), elem ) \
+ ) \
+)
+
+// Update the fold state when we hit an unrecognized param id
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_UNRECOGNIZED_ARG( state, elem ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_UNRECOGNIZED_PARAM_ID \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ), elem ) \
+ ) \
+)
+
+// On a fatal error don't bother trying to parse any more arguments
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_FORWARD_FATAL_ERROR( state, elem ) state
+
+// Determines if the category of this argument has already appeared
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_IS_DUPLICATE_CATEGORY( state, elem ) \
+BOOST_PP_SEQ_ELEM \
+( 0 \
+, BOOST_PP_SEQ_ELEM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+ ) \
+)
+
+// Update the fold state when we hit a parameter kind that we can't support
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NO_SUPPORT_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_NAME( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PARAM_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_PUBLIC( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR( state ) ) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FOR_TYPEDEF( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NO_PARAM_SUPPORT \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_ARG_NUM( state ) \
+ ) \
+ ) \
+)
+
+// Checks starting after we have determined that the parameter kind is supported
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INFO_MACRO_SUPPORTED( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_IS_DUPLICATE_CATEGORY( state, elem ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_DUPLICATE_CATEGORY_INFO \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NO_DUPLICATE \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_LACKS_PARENT_FOR_ARG( state, elem ) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES( elem ) \
+, BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) \
+ ) \
+)
+
+// Checks starting after we have determined that there is not a duplicate
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NO_DUPLICATE( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_LACKS_PARENT_FOR_ARG( state, elem ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_ARG_NOT_PAREN_INFO \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NO_ERROR_WITH_ARGUMENT \
+)( state, elem )
+
+// Yields 1 if there were errors, otherwise it yields 0
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_HAS_ERRORS( error_array ) \
+BOOST_PP_BOOL( BOOST_PP_ARRAY_SIZE( error_array ) )
+
+// Yields all errors as statements
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_ERRORS( error_array ) \
+BOOST_PP_IF( BOOST_PP_ARRAY_SIZE( error_array ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_ERRORS_IMPL \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_NO_ERRORS_IMPL \
+ )( error_array )
+
+// Do nothing if there are no errors to emit
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_NO_ERRORS_IMPL( error_array )
+
+// Yields all errors as statements (only valid if array size is greater than 1)
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_ERRORS_IMPL( error_array ) \
+void BOOST_PP_CAT( failed_auto_function_on_line_, __LINE__ )(); \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_ERROR_IMPL, ~ \
+, BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( error_array ) \
+)
+
+// Yields an error as a statement
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_EMIT_ERROR_IMPL( r, dummy, error ) error;
+
+#endif // BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/ad_hoc_concept/name_param_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/ad_hoc_concept/name_param_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,199 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/error.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+// This macro takes the arguments to a BOOST_GENERIC_CONCEPT invocation and
+// yields information about the concept name and its parameters, and also yields
+// the remaining macro arguments as a sequence.
+// This data is in a sequence of the form:
+// (error_array)(name)(param_details)
+// (remaining_args_seq)(curr_arg_num)
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS( ... ) \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_PARAM_LIST_DETS(\
+ dets\
+ ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_REMAINING_ARGS( \
+ dets\
+ ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_CURR_ARG_NUM( \
+ dets\
+ ) \
+BOOST_PP_SEQ_ELEM( 4, dets )
+
+// Takes the args as a sequence
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL( \
+ args_as_seq\
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_GREATER \
+ ( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+ , 1 \
+ ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL_VALID_SIZE \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL_INV_SIZE \
+)( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+( BOOST_PP_SEQ_TAIL( args_as_seq ) )( 2 ) \
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL_INV_SIZE( \
+ head\
+ ) \
+( ( 1 \
+ , (BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INVALID_NAME_PARAM_FORMAT(head))\
+ ) \
+) \
+(invalid_name)(invalid_params)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_IMPL_VALID_SIZE(\
+ head\
+ ) \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_NAME \
+ ( BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( head ) ) \
+, BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( head ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_NAME( head_arg ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( head_arg ) \
+, ( ( 1 \
+ , (BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_PARENTHESIZED_NAME(head_arg)) \
+ ) \
+ ) \
+ (head_arg) \
+, ((0,()))(head_arg) \
+)
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS( state, ... ) \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL \
+( state, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL( state \
+ , param_dets \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_VALID \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_INVALID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_INVALID( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_PARAMS_INVALID \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_NOT_PAREN( state \
+ , param_dets\
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_PARAMS_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_INVALID_FORMAT( \
+ state \
+ , param_dets\
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_INVALID_PARAM_FORMAT \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_VALID( state \
+ , param_dets\
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( param_dets ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_VOID \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_NONVOID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_NONVOID( state \
+ , param_dets \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARE_ALL_CLASS_OR_TYPENAME \
+ ( param_dets ) \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_FULLY_VALID \
+, BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PMS \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PMS(\
+ state \
+ , param_dets\
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_NONTYPE_PARAMS \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_FULLY_VALID( \
+ state \
+ , param_dets\
+ ) \
+state \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_CHECK_PARAMS_IMPL_VOID( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ERROR_VOID_PARAMS() \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#endif // BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_NAME_PARAM_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/ad_hoc_concept/try_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/ad_hoc_concept/try_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,6 @@
+#ifndef BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_TRY_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_TRY_DETAILS_HPP
+
+
+
+#endif // BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_TRY_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/always_void.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/always_void.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+#ifndef BOOST_GENERIC_DETAIL_ALWAYS_VOID_HPP
+#define BOOST_GENERIC_DETAIL_ALWAYS_VOID_HPP
+
+namespace boost { namespace generic { namespace detail {
+
+template< class... >
+struct always_void { typedef void type; };
+
+struct enabler {};
+
+template< class... >
+struct always_enabler { typedef enabler type; };
+
+} } }
+
+#endif // BOOST_GENERIC_DETAIL_ALWAYS_VOID_HPP

Added: sandbox/generic/include/boost/generic/detail/and.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/and.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+#ifndef BOOST_GENERIC_DETAIL_AND_HPP
+#define BOOST_GENERIC_DETAIL_AND_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< bool L, class R >
+struct and_impl : mpl::false_ {};
+
+template< class R >
+struct and_impl< true, R > : R {};
+
+template< class... P >
+struct and_;
+
+template<>
+struct and_<> : mpl::true_ {};
+
+template< class H >
+struct and_< H > : H {};
+
+template< class H, class... P >
+struct and_< H, P... > : and_impl< H::value, and_< P... > > {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_AND_HPP

Added: sandbox/generic/include/boost/generic/detail/are_valid_params.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/are_valid_params.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_HPP
+#define BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_HPP
+
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/params_to_list.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/list/fold_left.hpp>
+
+#define BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS( params ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( params ) \
+, BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_IMPL \
+, BOOST_GENERIC_DETAIL_ALWAYS_0 \
+)( params )
+
+#define BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_IMPL( params ) \
+BOOST_PP_LIST_FOLD_LEFT \
+( BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_IMPL_MACRO, 1 \
+, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST( params ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_IMPL_MACRO( s, state, elem ) \
+BOOST_PP_IIF( state \
+ , BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_ALWAYS_0 \
+ )( elem () ) // () necessary to consider no params as valid
+
+#define BOOST_GENERIC_DETAIL_ALWAYS_0( ... ) 0
+#define BOOST_GENERIC_DETAIL_ALWAYS_1( ... ) 1
+
+#endif // BOOST_GENERIC_DETAIL_ARE_VALID_PARAMS_HPP

Added: sandbox/generic/include/boost/generic/detail/arg_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/arg_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,558 @@
+#ifndef BOOST_GENERIC_DETAIL_ARG_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_ARG_DETAILS_HPP
+
+// ToDo: Remove all auto_function includes
+//#include <boost/auto_function/detail/error.hpp>
+//#include <boost/auto_function/detail/function_name_details.hpp>
+//#include <boost/auto_function/detail/is_conditional_arg.hpp>
+//#include <boost/auto_function/detail/is_parenthesized.hpp>
+//#include <boost/auto_function/detail/is_recognized_arg.hpp>
+//#include <boost/auto_function/detail/is_valid_name_and_params.hpp>
+//#include <boost/auto_function/detail/num_args.hpp>
+//#include <boost/auto_function/detail/opener_details.hpp>
+//#include <boost/auto_function/detail/param.hpp>
+//#include <boost/auto_function/detail/param_id.hpp>
+//#include <boost/auto_function/detail/param_id_category_value.hpp>
+//#include <boost/auto_function/detail/param_id_implies_parentheses.hpp>
+//#include <boost/auto_function/detail/param_list_details.hpp>
+//#include <boost/auto_function/detail/template_details.hpp>
+//#include <boost/auto_function/support.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/array/data.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/array/size.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/tuple/to_seq.hpp>
+
+// Takes in the parameters passed to BOOST_GENERIC.
+// It yields a sequence of the form:
+// (error_array)(template_details)(function_name_details)(param_list_details)
+// (arguments)
+// where arguments is a sequence with elements of the form:
+// (param_id_without_spaces)(param_without_id_in_paren)
+#define BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS( ... ) \
+BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_OPENER_DETAILS( __VA_ARGS__ ) )
+
+// Converts a preprocessor array to a sequence
+#define BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( result_as_array ) \
+BOOST_PP_TUPLE_TO_SEQ \
+( BOOST_PP_ARRAY_SIZE( result_as_array ) \
+, BOOST_PP_ARRAY_DATA( result_as_array ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_IMPL( opener_dets ) \
+BOOST_PP_IF \
+( BOOST_PP_ARRAY_SIZE \
+ ( BOOST_GENERIC_DETAIL_OPENER_DETAILS_ERRORS( opener_dets ) ) \
+, BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_OPENER_ERROR \
+, BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_CHECK_ARGS \
+)( BOOST_GENERIC_DETAIL_OPENER_DETAILS_ERRORS( opener_dets ) \
+ , BOOST_GENERIC_DETAIL_OPENER_DETAILS_TEMPLATE_DETAILS( opener_dets ) \
+ , BOOST_GENERIC_DETAIL_OPENER_DETAILS_FUNCTION_NAME_DETAILS(opener_dets) \
+ , BOOST_GENERIC_DETAIL_OPENER_DETAILS_PARAM_LIST_DETAILS( opener_dets ) \
+ , BOOST_GENERIC_DETAIL_OPENER_DETAILS_CURR_ARG_NUM( opener_dets ) \
+ , BOOST_GENERIC_DETAIL_OPENER_DETAILS_REMAINING_ARGS( opener_dets ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY() \
+BOOST_PP_REPEAT \
+( BOOST_GENERIC_DETAIL_NUM_PARAM_CATEGORIES \
+, BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO \
+, ~ \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO(z,n,t) \
+((0))
+
+// State is a sequence of:
+// A bit specifying if a fatal error was encountered
+// (in which case we don't try to parse any more arguments)
+//
+// The template details
+//
+// The function name details
+//
+// The param list details
+//
+// A value specifying the current argument number
+//
+// A sequence of sequences of category info where the first element is a
+// bit that specifies whether or not the category was encountered. If and
+// only if the first element is 1, there is a second element which
+// specifies the line number where the first occurrence of the category
+// appeared
+//
+// An array of sequences of analyzed conditional arguments of the form:
+// (param_id_without_spaces)(param_without_id_in_paren)
+//
+// explicit category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// do category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// switch category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// case category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// An array of errors
+#define BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_CHECK_ARGS( opener_errors \
+ , tmpl_dets \
+ , fun_name_dets \
+ , param_list_dets\
+ , curr_arg_num \
+ , remaining_args \
+ ) \
+BOOST_GENERIC_DETAIL_CHECK_FOR_VALID_END \
+( BOOST_PP_SEQ_FOLD_LEFT \
+ ( BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_MACRO \
+ , ( 0 ) \
+ ( tmpl_dets ) \
+ ( fun_name_dets ) \
+ ( param_list_dets ) \
+ ( curr_arg_num ) \
+ ( BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY() ) \
+ ( ( 0, () ) ) \
+ ( ( 0 ) ( ~ ) ( ~ ) ) \
+ ( ( 0 ) ( ~ ) ( ~ ) ) \
+ ( ( 0 ) ( ~ ) ( ~ ) ) \
+ ( ( 0 ) ( ~ ) ( ~ ) ) \
+ ( ( 0, () ) ) \
+ , remaining_args \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) \
+BOOST_PP_SEQ_ELEM( 4, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+BOOST_PP_SEQ_ELEM( 5, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) \
+BOOST_PP_SEQ_ELEM( 6, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS_AS_SEQ( state ) \
+BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) \
+BOOST_PP_SEQ_ELEM( 7, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_HAS_EXPLICIT_CATEGORY( state ) \
+BOOST_PP_SEQ_HEAD( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT_PARAM_ID( state ) \
+BOOST_PP_SEQ_ELEM( 1, BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT_PARAM( state ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( 2, BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+BOOST_PP_SEQ_ELEM( 11, state )
+
+#define BOOST_GENERIC_DETAIL_ARG_DETS_HAS_ERRORS( state ) \
+BOOST_PP_BOOL \
+( BOOST_PP_ARRAY_SIZE( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) ) )
+
+// state is described above
+#define BOOST_GENERIC_DETAIL_ARGUMENT_DETAILS_MACRO( s, state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) \
+, BOOST_GENERIC_DETAIL_FORWARD_FATAL_ERROR \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( elem ) \
+ , BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_NOT_PARENTHESIZED \
+ ) \
+)( state, elem )
+
+// Checks starting after it is established that the argument is parenthesized
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_PARENTHESIZED( state,elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( elem ) \
+, BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_RECOGNIZED \
+, BOOST_GENERIC_DETAIL_UNRECOGNIZED_ARG \
+)( state, elem )
+
+// Checks starting after we have recognized the parameter kind
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_RECOGNIZED( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_NO_BOOST_GENERIC_PARAM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+, BOOST_GENERIC_DETAIL_ERROR_NO_SUPPORT_INFO \
+, BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_SUPPORTED \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_NO_CHANGE_IN_ERRORS( state ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+// Invoked when no error is found (updates line counter, categories, and args)
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT( state, elem ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_PUSH_BACK_IF_CONDITIONAL \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ), elem ) \
+) \
+BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA( state, elem )
+
+#define BOOST_GENERIC_DETAIL_PUSH_BACK_IF_CONDITIONAL( array, elem ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG( elem ) \
+ , BOOST_GENERIC_DETAIL_PUSH_BACK_IF_CONDITIONAL_IMPL \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( array ) \
+ )( array, elem )
+
+#define BOOST_GENERIC_DETAIL_PUSH_BACK_IF_CONDITIONAL_IMPL( array, elem ) \
+BOOST_PP_ARRAY_PUSH_BACK \
+( array \
+, ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA(state,elem) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( explicit ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_EXPLICIT \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_EXPL \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_EXPLICIT( \
+ state \
+ , elem \
+ ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_EXPL( \
+ state\
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( do ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_DO \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_DO \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_DO( state \
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_DO(state \
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( switch ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_SWITCH \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_SWITCH \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_SWITCH( \
+ state \
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_SWITCH( \
+ state\
+ , elem \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( case ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_CASE \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_CASE \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_CASE( state \
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( ( 1 ) ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT_END_DATA_NOT_CASE( \
+ state \
+ , elem \
+ ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) )
+
+// Update the fold state when we hit an argument that should take a sequence but
+// it is detected that the argument does not have parentheses
+#define BOOST_GENERIC_DETAIL_ARG_ARG_NOT_PAREN_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_ERROR_ARG_ARG_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ) \
+)
+
+// Update the fold state when we hit an argument that duplicates a category that
+// was already encountered
+#define BOOST_GENERIC_DETAIL_DUPLICATE_CATEGORY_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_OF_CATEGORY \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( elem ) \
+ , BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) \
+ , BOOST_PP_SEQ_ELEM \
+ ( 1 \
+ , BOOST_PP_SEQ_ELEM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+ ) \
+ ) \
+ ) \
+ ) \
+)
+
+// Update the fold state when we hit an argument that wasn't parenthesized
+// An argument that isn't parenthesized is a fatal error and we can't parse
+// anything after that since we can't know whether or not commas there are
+// intended to end that argument or if they are supposed to be a part of that
+// argument
+#define BOOST_GENERIC_DETAIL_NOT_PARENTHESIZED( state, elem ) \
+( 1 )( ~ )( ~ )( ~ )( ~ )( ~ )( ~ ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_ERROR_NOT_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ), elem ) \
+ ) \
+)
+
+// Update the fold state when we hit an unrecognized param id
+#define BOOST_GENERIC_DETAIL_UNRECOGNIZED_ARG( state, elem ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_ERROR_UNRECOGNIZED_PARAM_ID \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ), elem ) \
+ ) \
+)
+
+// On a fatal error don't bother trying to parse any more arguments
+#define BOOST_GENERIC_DETAIL_FORWARD_FATAL_ERROR( state, elem ) state
+
+// Determines if the category of this argument has already appeared
+#define BOOST_GENERIC_DETAIL_IS_DUPLICATE_CATEGORY( state, elem ) \
+BOOST_PP_SEQ_ELEM \
+( 0 \
+, BOOST_PP_SEQ_ELEM( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+ ) \
+)
+
+// Update the fold state when we hit a parameter kind that we can't support
+#define BOOST_GENERIC_DETAIL_ERROR_NO_SUPPORT_INFO( state, elem ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FATAL_ERROR( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_TMP_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_FUN_NAME_DETS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_CATEGORY_INFO( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CONDITIONAL_ARGS( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_EXPLICIT( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DO( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_SWITCH( state ) ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_CASE( state ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_ERROR_NO_PARAM_SUPPORT \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) \
+ , BOOST_GENERIC_DETAIL_ARG_DETS_ARG_NUM( state ) \
+ ) \
+ ) \
+)
+
+// Checks starting after we have determined that the parameter kind is supported
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_SUPPORTED( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_DUPLICATE_CATEGORY( state, elem ) \
+, BOOST_GENERIC_DETAIL_DUPLICATE_CATEGORY_INFO \
+, BOOST_GENERIC_DETAIL_ERROR_NO_DUPLICATE \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_LACKS_PARENT_FOR_ARG( state, elem ) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES( elem ) \
+, BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) \
+ ) \
+)
+
+// Checks starting after we have determined that there is not a duplicate
+#define BOOST_GENERIC_DETAIL_ERROR_NO_DUPLICATE( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_LACKS_PARENT_FOR_ARG( state, elem ) \
+, BOOST_GENERIC_DETAIL_ARG_ARG_NOT_PAREN_INFO \
+, BOOST_GENERIC_DETAIL_PROPER_ARGUMENT_FORM \
+)( state, elem )
+
+#define BOOST_GENERIC_DETAIL_PROPER_ARGUMENT_FORM( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( ( switch ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_CHECK_SWITCH_OPENER_REQUIREMENT \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT \
+)( state, elem )
+
+// ToDo: Check for template parameter
+#define BOOST_GENERIC_DETAIL_CHECK_SWITCH_OPENER_REQUIREMENT(state,elem) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_NONBASIC \
+ ( BOOST_GENERIC_DETAIL_ARG_DETS_PARAM_LIST_DETS( state ) ) \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT \
+, BOOST_GENERIC_DETAIL_SWITCH_USED_WITH_BASIC_PARAM_LIST \
+)( state, elem )
+
+// Yields 1 if there were errors, otherwise it yields 0
+#define BOOST_GENERIC_DETAIL_HAS_ERRORS( error_array ) \
+BOOST_PP_BOOL( BOOST_PP_ARRAY_SIZE( error_array ) )
+
+// Yields all errors as statements
+#define BOOST_GENERIC_DETAIL_EMIT_ERRORS( error_array ) \
+BOOST_PP_IF( BOOST_PP_ARRAY_SIZE( error_array ) \
+ , BOOST_GENERIC_DETAIL_EMIT_ERRORS_IMPL \
+ , BOOST_GENERIC_DETAIL_EMIT_NO_ERRORS_IMPL \
+ )( error_array )
+
+// Do nothing if there are no errors to emit
+#define BOOST_GENERIC_DETAIL_EMIT_NO_ERRORS_IMPL( error_array )
+
+// Yields all errors as statements (only valid if array size is greater than 1)
+#define BOOST_GENERIC_DETAIL_EMIT_ERRORS_IMPL( error_array ) \
+void BOOST_PP_CAT( failed_auto_function_on_line_, __LINE__ )(); \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_EMIT_ERROR_IMPL, ~ \
+, BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( error_array ) \
+)
+
+// Yields an error as a statement
+#define BOOST_GENERIC_DETAIL_EMIT_ERROR_IMPL( r, dummy, error ) error;
+
+#endif // BOOST_GENERIC_DETAIL_ARG_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/arg_of_category.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/arg_of_category.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,86 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_HPP
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/param.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/generic/detail/param_id_category_value.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+
+// Yields 1 if an argument of the given category was passed
+#define BOOST_GENERIC_DETAIL_HAS_ARG_OF_CATEGORY( param_category \
+ , ... \
+ ) \
+BOOST_PP_EQUAL \
+( BOOST_PP_SEQ_SIZE \
+ ( BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_IMPL( param_category \
+ , __VA_ARGS__ \
+ ) \
+ ) \
+, 2 \
+)
+
+// Yields a parenthesized version of the parameter passed, without the ID
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY( param_category \
+ , ... \
+ ) \
+BOOST_PP_SEQ_ELEM \
+( 1, BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_IMPL( param_category \
+ , __VA_ARGS__ \
+ ) \
+)
+
+// Yields the parameter ID of the argument that matches the desired category
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_PARAM_ID( param_category \
+ , ... \
+ ) \
+BOOST_PP_SEQ_HEAD \
+( BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_IMPL( param_category \
+ , __VA_ARGS__ \
+ ) \
+)
+
+// Yields a 2 element sequence of the form (param_id)((param))
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_IMPL( param_category \
+ , ... \
+ ) \
+BOOST_PP_SEQ_FOLD_LEFT \
+( BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_MACRO \
+, ( param_category ) \
+, BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_NOT_YET_FOUND( state, elem ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( state ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ ) \
+, ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ( ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) ) \
+, state \
+)
+
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_FOUND( state, elem ) state
+
+#define BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_MACRO( s, state, elem ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE( state ), 2 ) \
+, BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_FOUND \
+, BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_NOT_YET_FOUND \
+)( state, elem )
+
+#endif // BOOST_GENERIC_DETAIL_ARG_OF_CATEGORY_HPP

Added: sandbox/generic/include/boost/generic/detail/args_to_array.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/args_to_array.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ARGS_TO_ARRAY
+#define BOOST_GENERIC_DETAIL_ARGS_TO_ARRAY
+
+#include <boost/generic/detail/num_args.hpp>
+
+#define BOOST_GENERIC_DETAIL_ARGS_TO_ARRAY( ... ) \
+( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ) \
+, ( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ARGS_TO_ARRAY_AFTER_RESCAN( ... ) \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN( __VA_ARGS__ ) \
+, ( __VA_ARGS__ ) \
+)
+
+#endif // BOOST_GENERIC_DETAIL_ARGS_TO_ARRAY

Added: sandbox/generic/include/boost/generic/detail/args_to_sequence.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/args_to_sequence.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE_HPP
+#define BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/wrap.hpp>
+#include <boost/preprocessor/tuple/to_seq.hpp>
+
+#define BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( ... ) \
+BOOST_PP_TUPLE_TO_SEQ( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ) \
+ , ( __VA_ARGS__ ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_ARGS_TO_SEQUENCE( arg ) \
+BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE arg
+
+#endif // BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE_HPP

Added: sandbox/generic/include/boost/generic/detail/array_to_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/array_to_seq.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,22 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ_HPP
+#define BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ_HPP
+
+#include <boost/preprocessor/array/data.hpp>
+#include <boost/preprocessor/array/size.hpp>
+#include <boost/preprocessor/tuple/to_seq.hpp>
+
+#define BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( array ) \
+BOOST_PP_TUPLE_TO_SEQ \
+( BOOST_PP_ARRAY_SIZE( array ) \
+, BOOST_PP_ARRAY_DATA( array ) \
+)
+
+#endif // BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ_HPP

Added: sandbox/generic/include/boost/generic/detail/asm_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/asm_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ASM_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_ASM_DETAILS_HPP
+
+// asm specifies an axiom for a concept
+// an asm parameter is of the form:
+// ( asm (name)( params ) nothing-should-be-here, ( definition ) )
+// At the very least, axioms should be syntax checked
+
+#endif // BOOST_GENERIC_DETAIL_ASM_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/assert_at_global_scope.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/assert_at_global_scope.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE_HPP
+#define BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+void boost_generic_detail_global_scope_check() {}
+
+namespace boost_generic_detail_scope_checker {
+
+template< void (&L)(), void (&R)() >
+struct boost_generic_detail_is_same_fun { static bool const value = false; };
+
+template< void (&L)() >
+struct boost_generic_detail_is_same_fun< L, L >
+{
+ static bool const value = true;
+};
+
+namespace {
+
+void boost_generic_detail_global_scope_check() {}
+
+}
+
+}
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE( message ) \
+namespace boost_generic_detail_scope_checker { \
+static_assert \
+( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun \
+ < boost_generic_detail_global_scope_check \
+ , ::boost_generic_detail_scope_checker \
+ ::boost_generic_detail_global_scope_check \
+ >::value \
+, message \
+); \
+}
+
+#endif // BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE_HPP

Added: sandbox/generic/include/boost/generic/detail/auto_concept_map/arg_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/auto_concept_map/arg_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,214 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_HPP
+
+#include <boost/generic/detail/array_to_seq.hpp>
+#include <boost/generic/detail/concept/name_param_details.hpp>
+#include <boost/generic/detail/is_conditional_arg.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/is_recognized_arg.hpp>
+#include <boost/generic/detail/map_name_params_details.hpp>
+#include <boost/generic/detail/param.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/generic/detail/param_id_category.hpp>
+#include <boost/generic/detail/param_id_category_value.hpp>
+#include <boost/generic/detail/param_id_implies_parentheses.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/array/elem.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/array/size.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+// Takes the parameters to the auto concept macro of the format:
+//
+// template decl, ( concept name )( concept_params... ), named macro params...
+//
+// and puts it into an easy-access datastructure of the format:
+//
+// A bit specifying if a fatal error was encountered
+// (in which case we may abort parsing arguments midway through)
+//
+// The template parameter details
+//
+// The name and param dets
+//
+// A value specifying the current argument number
+//
+// An array of errors
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS( ... ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) \
+) // ToDo: Verify there are at least 2 arguments
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL(param_dets, ...)\
+BOOST_PP_IF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_NO_PARAM_ERROR \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_PARAM_ERRORS \
+)( param_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_NO_PARAM_ERROR( \
+ param_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_NO_PARAM_ERROR_ \
+( param_dets, BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_NO_PARAM_ERROR_(\
+ param_dets \
+ , name_param_dets\
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_VALID( name_param_dets ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_NO_ERROR \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_NAME_PARAMS_ERROR \
+)( param_dets, name_param_dets )
+
+// State is a sequence of:
+// A bit specifying if a fatal error was encountered
+// (in which case we don't try to parse any more arguments)
+//
+// The concept name
+//
+// The concept param list details
+//
+// A value specifying the current argument number
+//
+// A sequence of sequences of category info where the first element is a
+// bit that specifies whether or not the category was encountered. If and
+// only if the first element is 1, there is a second element which
+// specifies the line number where the first occurrence of the category
+// appeared
+//
+// An array of sequences of analyzed conditional arguments of the form:
+// (param_id_without_spaces)(param_without_id_in_paren)
+//
+// public category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// for category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// for typedef category argument if present following the form:
+// (exists_bit)(param_id_without_spaces)(param_without_id_in_paren)
+//
+// An array of errors
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_NO_ERROR( tpl_dets \
+ , name_param_dets \
+ ) \
+( 0 ) \
+( tpl_dets ) \
+( name_param_dets ) \
+( 2 ) \
+( ( 0, () ) )
+
+// ToDo: Provide more detailed error information.
+// Was the arg not parenthesized?
+// Was the sequence not of size 2?
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_IMPL_PARAM_ERRORS( \
+ tpl_dets\
+ , ... \
+ ) \
+( 1 ) \
+( tpl_dets ) \
+( ~ ) \
+( 1 ) \
+( ( 1 \
+ , ( static_assert \
+ ( false \
+ , "Improperly formatted template parameters specified for auto concept " \
+ "map." \
+ ) \
+ ) \
+ ) \
+)
+
+// ToDo: Provide more detailed error information.
+// Was the arg not parenthesized?
+// Was the sequence not of size 2?
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_NAME_PARAMS_ERROR( \
+ tpl_dets \
+ , name_param_dets\
+ ) \
+( 1 ) \
+( tpl_dets ) \
+( name_param_dets ) \
+( 2 ) \
+( ( 1 \
+ , ( static_assert \
+ ( false \
+ , "Improperly formatted concept name and parameters specified for auto " \
+ "concept map." \
+ ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_FATAL_ERROR( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_TPL_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_CONCEPT_NAME_PARAM_DETS(\
+ state )\
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_ARG_NUM( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_ERRORS( state ) \
+BOOST_PP_SEQ_ELEM( 4, state )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( state ) \
+BOOST_PP_BOOL \
+( BOOST_PP_ARRAY_SIZE \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_ERRORS( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS( state ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS_ \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_ERRORS( state ) )
+
+// Yields all errors as statements
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS_( error_array ) \
+BOOST_PP_IF( BOOST_PP_ARRAY_SIZE( error_array ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS_IMPL \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_NO_ERRORS_IMPL \
+ )( error_array )
+
+// Do nothing if there are no errors to emit
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_NO_ERRORS_IMPL( error_array )
+
+// Yields all errors as statements (only valid if array size is greater than 1)
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS_IMPL( error_array ) \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERROR_IMPL, ~ \
+, BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( error_array ) \
+)
+
+// Yields an error as a statement
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERROR_IMPL(r, dummy, error )\
+error;
+
+#endif // BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/auto_concept_map/name_param_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/auto_concept_map/name_param_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,180 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/error.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+// This macro takes the arguments to a BOOST_GENERIC_AUTO_CONCEPT_MAP invocation
+// and yields information about the concept name and its parameters, and also
+// yields the remaining macro arguments as a sequence.
+// This data is in a sequence of the form:
+// (error_array)(name)(param_details)
+// (remaining_args_seq)(curr_arg_num)
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS( ... ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+// Accessor for yielded param details - errors
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+// Accessor for yielded param details - concept name
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+// Accessor for yielded param details - param list dets
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_PARAM_LIST_DETS( dets )\
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+// Accessor for yielded param details - remaining args
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_REMAINING_ARGS( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+// Accessor for yielded param details - curr arg num
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_CURR_ARG_NUM( dets ) \
+BOOST_PP_SEQ_ELEM( 4, dets )
+
+// Takes the args as a sequence
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL( \
+ args_as_seq )\
+BOOST_PP_IIF \
+( BOOST_PP_GREATER \
+ ( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+ , 1 \
+ ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL_VALID_SIZE \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL_INVALID_SIZE \
+)( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+( BOOST_PP_SEQ_TAIL( args_as_seq ) )( 2 ) \
+
+//
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL_INVALID_SIZE(head)\
+((1,(BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_INVALID_NAME_PARAM_FORMAT( head )))) \
+(invalid_name)(invalid_params)
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_IMPL_VALID_SIZE( head )\
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_NAME \
+ ( BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( head ) ) \
+, BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( head ) \
+)
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_NAME( head_arg ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( head_arg ) \
+, ((1,(BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_PARENTHESIZED_NAME( head_arg )))) \
+ (head_arg) \
+, ((0,()))(head_arg) \
+)
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS( state, ... ) \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL \
+( state, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL( state, param_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_VALID \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_INVALID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_INVALID( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_PARAMS_INVALID \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_NOT_PAREN( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_PARAMS_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_INVALID_FORMAT( state \
+ , param_dets\
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_INVALID_PARAM_FORMAT \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_VALID(state,param_dets) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( param_dets ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_VOID \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_NONVOID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_NONVOID( state \
+ , param_dets \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARE_ALL_CLASS_OR_TYPENAME \
+ ( param_dets ) \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_FULLY_VALID \
+, BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PARAMS \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PARAMS( \
+ state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_NONTYPE_PARAMS \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_FULLY_VALID( state \
+ , param_dets \
+ ) \
+state \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_CHECK_PARAMS_IMPL_VOID( state,param_dets )\
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ERROR_VOID_PARAMS() \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#endif // BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_NAME_PARAM_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/axiom_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/axiom_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,81 @@
+#ifndef BOOST_GENERIC_DETAIL_AXIOM_DETS_HPP
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Takes axioms of the form:
+// axiom something_not_empty
+//
+// Yields results in the form:
+// (validity_bit)(partial_bit)((something_not_empty))
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOM( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_AXIOM_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_AXIOM_DETS wrapped_arg
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_ARG( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_ \
+( BOOST_GENERIC_DETAIL_EAT_AXIOM( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ )\
+ , BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_PARTIAL \
+ , BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_VALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_INVALID( ... ) \
+(0)(0)((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_PARTIAL( ... ) \
+(0)(1)((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_AXIOM_DETS_IMPL_VALID( ... ) \
+(1)(1)((__VA_ARGS__))
+
+// Begin "starts with axiom" macros
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOM( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOM_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOM_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOM \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_AXIOMaxiom ,
+
+// Begin "eat axiom" macros
+#define BOOST_GENERIC_DETAIL_EAT_AXIOM( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_AXIOM, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_AXIOMaxiom
+
+#endif // BOOST_GENERIC_DETAIL_AXIOM_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/completed_concept_map_bases.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/completed_concept_map_bases.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+#ifndef BOOST_GENERIC_DETAIL_COMPLETED_CONCEPT_MAP_BASES_HPP
+#define BOOST_GENERIC_DETAIL_COMPLETED_CONCEPT_MAP_BASES_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/detail/concept_impl_of.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class ConceptMap, class... ConceptAndParams >
+struct completed_concept_map_bases
+ : virtual concept_impl_of< ConceptAndParams >::type::template
+ boost_generic_detail_completed_concept_map_from_concept
+ < ConceptMap, ConceptAndParams >::type... {};
+//
+//template< class ConceptMap, class ConceptAndParams >
+//struct completed_concept_map_bases< ConceptMap, ConceptAndParams >
+// : virtual concept_impl_of< ConceptAndParams >::type::template
+// boost_generic_detail_completed_concept_map_from_concept
+// < ConceptMap, ConceptAndParams >::type {};
+//
+//template< class ConceptMap, class ConceptAndParams >
+//struct completed_concept_map_bases< ConceptMap, ConceptAndParams >
+// : virtual concept_impl_of< ConceptAndParams >::type::template
+// boost_generic_detail_completed_concept_map_from_concept
+// < ConceptMap, ConceptAndParams >::type {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_COMPLETED_CONCEPT_MAP_BASES_HPP

Added: sandbox/generic/include/boost/generic/detail/concept/arg_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept/arg_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,247 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_ARG_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_ARG_DETAILS_HPP
+
+#include <boost/generic/detail/concept/req_dets.hpp>
+#include <boost/generic/detail/concept_sig_dets.hpp>
+#include <boost/generic/detail/public_dets.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/num_args_is_1.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// ToDo: Better error handling if user passes no parameters at all
+
+// Arguments are of the form:
+// concept_sig
+// , ?[public_req]
+// , *[asm_req|typename_req|function_req|if_req|type_template_req|this_req]
+// Result is of the form:
+// (validity_bit)(concept_sig_dets)(req_dets)
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS( ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_SIG_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_CONCEPT \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_SIG_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_PARAM_DETS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_SIG_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME_AND_ARGS( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+< BOOST_GENERIC_DETAIL_CONCEPT_DETS_ARGS( dets ) >
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_AUGMENTED_PARAMS( dets, aug ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_PARAMS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ), aug )
+
+#endif
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_AUGMENTED_ARGS( dets, aug ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_ARGS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ), aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_VISIT_BODY( dets, macro_base, data ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_REQ_DETS( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_VISIT_BODY_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets, macro_base, data )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_VISIT_BODY_( dets, macro_base, data )\
+BOOST_GENERIC_DETAIL_REQ_DETS_VISIT \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_REQ_DETS( dets ) \
+, macro_base \
+, BOOST_PP_INC \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) ) ) \
+, data \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_FOLD_BODY( dets, macro_base, state ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_REQ_DETS( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_FOLD_BODY_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( state ) \
+ )( dets, macro_base, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_FOLD_BODY_( dets, macro_base, state )\
+BOOST_GENERIC_DETAIL_REQ_DETS_FOLD \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_REQ_DETS( dets ) \
+, macro_base \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_NAME( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS_CONCEPT_PARAM_DETS( dets ) \
+, BOOST_PP_INC \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) ) ) \
+, state \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_PUBLIC_DETS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_PUBLIC( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_DETS_PUBLIC_DETS( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_PARENTS( dets ) \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENTS \
+( BOOST_GENERIC_DETAIL_CONCEPT_DETS_PUBLIC_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_HAS_REQ_DETS( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_DETS_REQ_DETS( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_REQ_DETS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 3, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL( concept_sig_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_EMPTY \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY \
+ )( concept_sig_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY( concept_sig_dets,... )\
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY_ \
+( concept_sig_dets, BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY_(concept_sig_dets,...) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( concept_sig_dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY_IMPL \
+, BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_INVALID \
+)( concept_sig_dets \
+ , BOOST_GENERIC_DETAIL_WRAPPED_PUBLIC_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_INVALID( concept_sig_dets \
+ , req_dets \
+ ) \
+(0)(concept_sig_dets)(())((req_dets))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NONEMPTY_IMPL( concept_sig_dets \
+ , public_dets, ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( public_dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_PUBLIC \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NO_PUBLIC \
+ )( concept_sig_dets, public_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_NO_PUBLIC( concept_sig_dets \
+ , public_dets, ... \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_BODY( concept_sig_dets, , __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_PUBLIC( concept_sig_dets \
+ , public_dets, ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_JUST_PUBLIC \
+ , BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_PUBLIC_AND_MORE \
+ )( concept_sig_dets, public_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_PUBLIC_AND_MORE(concept_sig_dets\
+ , public_dets,...\
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_BODY \
+( concept_sig_dets, public_dets \
+, BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_PUBLIC_DETS_NO_TOP_LEVEL_ERROR( dets )\
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY( dets ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 1 ) \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_BODY( concept_sig_dets \
+ , public_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_BODY_ \
+( concept_sig_dets, public_dets \
+, BOOST_GENERIC_DETAIL_REQ_DETS( __VA_ARGS__ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_BODY_( concept_sig_dets \
+ , public_dets \
+ , req_dets \
+ ) \
+(BOOST_PP_BITAND \
+ ( BOOST_PP_BITAND \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( concept_sig_dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_SIG_PUBLIC_DETS_NO_TOP_LEVEL_ERROR \
+ ( public_dets ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( req_dets ) \
+ ) \
+) \
+(concept_sig_dets) \
+((public_dets)) \
+((req_dets))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_EMPTY( concept_sig_dets, ... ) \
+(BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( concept_sig_dets )) \
+(concept_sig_dets) \
+(()) \
+(())
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_DETS_IMPL_JUST_PUBLIC( concept_sig_dets \
+ , public_dets \
+ , ... \
+ ) \
+(BOOST_PP_BITAND \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( concept_sig_dets ) \
+ , BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( public_dets ) \
+ ) \
+) \
+(concept_sig_dets) \
+((public_dets)) \
+(())
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_ARG_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept/emulator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept/emulator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,1706 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <cstddef>
+#include <new>
+#include <type_traits>
+
+#endif
+
+#include <boost/generic/detail/always_void.hpp>
+#include <boost/generic/detail/concept/emulator_state.hpp>
+#include <boost/generic/detail/concept_is_valid.hpp>
+#include <boost/generic/detail/deduction_result.hpp>
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_not_same.hpp>
+#include <boost/generic/detail/nary_cat.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/type_list.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+#include <boost/preprocessor/seq/subseq.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class T >
+struct identity_unless_void
+{
+ typedef T type;
+};
+
+template<> struct identity_unless_void< void > {};
+template<> struct identity_unless_void< void const > {};
+template<> struct identity_unless_void< void volatile > {};
+template<> struct identity_unless_void< void volatile const > {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_new_checker_nonnested : mpl::false_ {};
+
+template< class T, class... P >
+struct operator_new_checker_nonnested
+ < T, type_list< std::size_t, P... >
+ , typename always_void
+ < decltype( new( ::std::declval< P >()... ) T ) >::type
+ >
+ : mpl::true_ {};
+
+template< class T, class... Params >
+struct operator_new_checker
+ : operator_new_checker_nonnested< T, type_list< Params... > > {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_new_array_checker_nonnested : mpl::false_ {};
+
+template< class T, class... P >
+struct operator_new_array_checker_nonnested
+ < T, type_list< std::size_t, P... >
+ , typename always_void
+ < decltype( new( ::std::declval< P >()... ) T[1] ) >::type
+ >
+ : mpl::true_ {};
+
+template< class T, class... Params >
+struct operator_new_array_checker
+ : operator_new_array_checker_nonnested< T, type_list< Params... > > {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_delete_checker_nested : mpl::false_ {};
+
+template< class T, class... P >
+struct operator_delete_checker_nested
+ < T, type_list< P... >
+ , typename always_void
+ < decltype( T::operator delete( ::std::declval< P >()... ) ) >::type
+ > : mpl::true_ {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_delete_checker_nonnested : mpl::false_ {};
+
+template< class T >
+struct operator_delete_checker_nonnested
+ < T, type_list< void* >
+ , typename always_void
+ < decltype( delete std::declval< T* >() ) >::type
+ >
+ : mpl::true_ {};
+
+template< class T, class H, class... P >
+struct operator_delete_checker_nonnested
+ < T, type_list< void*, H, P... >
+ , typename always_void
+ < decltype( operator delete( ::std::declval< void* >()
+ , ::std::declval< H >()
+ , ::std::declval< P >()...
+ )
+ )
+ >::type
+ >
+ : mpl::true_ {};
+
+template< class T, class... Params >
+struct operator_delete_checker
+ : mpl::or_< operator_delete_checker_nested< T, type_list< Params... > >
+ , operator_delete_checker_nonnested< T, type_list< Params... > >
+ > {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_delete_array_checker_nested : mpl::false_ {};
+
+template< class T, class... P >
+struct operator_delete_array_checker_nested
+ < T, type_list< P... >
+ , typename always_void
+ < decltype( T::operator delete[]( ::std::declval< P >()... ) ) >::type
+ > : mpl::true_ {};
+
+template< class T, class Params, class Enabler = void >
+struct operator_delete_array_checker_nonnested : mpl::false_ {};
+
+template< class T, class... P >
+struct operator_delete_array_checker_nonnested
+ < T, type_list< P... >
+ , typename always_void
+ < decltype( operator delete[]( ::std::declval< P >()... ) ) >::type
+ >
+ : mpl::true_ {};
+
+template< class T, class... Params >
+struct operator_delete_array_checker
+ : mpl::or_< operator_delete_array_checker_nested< T, type_list< Params... > >
+ , operator_delete_array_checker_nonnested
+ < T, type_list< Params... > >
+ > {};
+
+struct allocation_operator_tag_new {};
+struct deallocation_operator_tag_delete {};
+
+template< class Tag, class T, class... Params >
+typename enable_if_c
+< mpl::and_< is_same< Tag, allocation_operator_tag_new >
+ , operator_new_checker< T, Params... >
+ >::value
+>::type*
+allocation_operator_fun();
+
+template< class Tag, class T, class... Params >
+typename enable_if_c
+< mpl::and_< is_same< Tag, allocation_operator_tag_new[] >
+ , operator_new_array_checker< T, Params... >
+ >::value
+>::type*
+allocation_operator_fun();
+
+template< class Tag, class T, class... Params >
+typename enable_if_c
+< mpl::and_< is_same< Tag, deallocation_operator_tag_delete >
+ , operator_delete_checker< T, Params... >
+ >::value
+>::type
+deallocation_operator_fun();
+
+template< class Tag, class T, class... Params >
+typename enable_if_c
+< mpl::and_< is_same< Tag, deallocation_operator_tag_delete[] >
+ , operator_delete_array_checker< T, Params... >
+ >::value
+>::type
+deallocation_operator_fun();
+
+template< class T >
+struct has_builtin_arrow_impl : mpl::false_ {};
+
+template< class T >
+struct has_builtin_arrow_impl< T* > : std::is_object< T > {};
+
+template< class T >
+struct remove_ref_decay_and_remove_cv
+ : std::remove_cv
+ < typename std::decay< typename std::remove_reference< T >::type >::type >
+{};
+
+template< class T >
+struct has_builtin_arrow
+ : has_builtin_arrow_impl
+ < typename remove_ref_decay_and_remove_cv< T >::type > {};
+
+template< class T >
+struct overloaded_arrow_return_type
+{
+ typedef decltype( std::declval< T >().operator->() ) type;
+};
+
+template< class T >
+struct operator_arrow_return_type
+ : mpl::if_c< has_builtin_arrow< T >::value
+ , remove_ref_decay_and_remove_cv< T >
+ , overloaded_arrow_return_type< T >
+ >::type {};
+
+template< class T, class Enabler = void >
+struct has_overloaded_arrow : mpl::false_ {};
+
+template< class T >
+struct has_overloaded_arrow
+ < T, typename always_void< decltype( std::declval< T >().operator->() ) >
+ ::type
+ >
+ : mpl::true_ {};
+
+template< class T >
+typename lazy_enable_if_c
+< mpl::or_< has_builtin_arrow< T >, has_overloaded_arrow< T > >::value
+, operator_arrow_return_type< T >
+>::type
+operator_arrow_fun();
+
+template< class T, class Types >
+struct is_constructible_ref;
+
+template< class T >
+struct is_constructible_ref
+ < T
+ , type_list<>
+ > : mpl::false_ {};
+
+template< class T, class Type >
+struct is_constructible_ref
+ < T
+ , type_list< Type >
+ > : std::is_convertible< Type, T > {};
+
+template< class T, class... Types >
+struct is_constructible_ref
+ < T
+ , type_list< Types... >
+ > : mpl::false_ {};
+
+template< class T, class Types, class Enabler = void >
+struct is_constructible_nonref : ::boost::mpl::false_ {};
+
+template< class T, class... Types >
+struct is_constructible_nonref
+ < T
+ , type_list< Types... >
+ , typename always_void
+ < decltype( T( std::declval< Types >()... ) ) >::type
+ > : mpl::true_ {};
+
+
+template< class T, class Types >
+struct is_constructible
+ : std::conditional
+ < std::is_reference< T >::value
+ , is_constructible_ref< T, Types >
+ , is_constructible_nonref< T, Types >
+ >::type {};
+
+template< class T, class Types >
+typename enable_if_c
+< mpl::and_< std::is_object< typename std::remove_reference< T >::type >
+ , is_constructible< T, Types >
+ >::value
+, T&&
+>::type
+constructor_fun();
+
+template< class T, class Enabler = void >
+struct is_destructible : mpl::false_ {};
+
+template< class T >
+struct is_destructible
+ < T, decltype( std::declval< T >().~T() ) >
+ : mpl::true_ {};
+
+template< class T >
+typename enable_if_c
+< mpl::or_
+ < std::is_reference< T >
+ , mpl::and_< std::is_object< T >
+ , is_destructible< T >
+ >
+ >::value
+>::type
+destructor_fun();
+
+template< class From, class To >
+struct is_convertible_or_target_is_void
+ : std::is_convertible< From, To > {};
+
+template< class From >
+struct is_convertible_or_target_is_void< From, void > : std::true_type {};
+
+template< class From >
+struct is_convertible_or_target_is_void< From, void const > : std::true_type {};
+
+template< class From >
+struct is_convertible_or_target_is_void< From, void volatile >
+ : std::true_type {};
+
+template< class From >
+struct is_convertible_or_target_is_void< From, void const volatile >
+ : std::true_type {};
+
+} } }
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_STATIC_ASSERT( arg ) \
+static_assert \
+( ::boost::generic::detail::concept_is_valid \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) >::value \
+, "requires " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE arg \
+);
+
+#define BOOST_GENERIC_DETAIL_EMULATOR_STATIC_ASSERT_TYPENAME( concept_, name ) \
+static_assert \
+( ::boost::generic::detail::is_not_same \
+ < typename concept_::name, ::boost::generic::detail::no_deduction >::value \
+, "typename '" BOOST_PP_STRINGIZE( name ) \
+ "' was not explicitly satisfied and cannot be deduced." \
+); \
+static_assert \
+( ::boost::generic::detail::is_not_same \
+ < typename concept_::name \
+ , ::boost::generic::detail::ambiguous_deduction \
+ >::value \
+, "typename '" BOOST_PP_STRINGIZE( name ) \
+ "' was not explicitly satisfied and deduction results in ambiguity." \
+);
+
+#define BOOST_GENERIC_DETAIL_EMULATOR_STATIC_ASSERT_CONSTRAINED_TYPENAME( \
+ concept_ \
+ , name \
+ , constraint\
+ ) \
+BOOST_GENERIC_DETAIL_EMULATOR_STATIC_ASSERT_TYPENAME( concept_, name ) \
+static_assert \
+( ::boost::mpl::or_ \
+ < ::boost::is_same \
+ < typename concept_::name, ::boost::generic::detail::no_deduction > \
+ , ::boost::is_same \
+ < typename concept_::name, ::boost::generic::detail::ambiguous_deduction > \
+ , ::boost::generic::detail::concept_is_valid \
+ < constraint< typename concept_::name > > \
+ >::value \
+, "typename '" BOOST_PP_STRINGIZE( name ) "' does not model '" \
+ BOOST_PP_STRINGIZE( constraint ) "'." \
+);
+
+#define BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEF( name, params, typename_a ) \
+typedef typename ::boost::mpl::eval_if_c \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_typename_deducers::name >::value \
+ , BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( params ) > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( typename_a ) ) \
+ ) void********** \
+ > \
+ > \
+ , ::boost::mpl::identity \
+ < typename boost_generic_detail_typename_deducers::name > \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS( state \
+ , param_dets \
+ , i \
+ , return_type\
+ , expression \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_ \
+( param_dets, i, return_type, expression \
+, BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+, ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+ ) \
+, ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_MAC( r \
+ , data \
+ , elem \
+ ) \
+template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT \
+( boost_generic_detail_impl_funs_deduce_, BOOST_PP_SEQ_ELEM( 0, data ), elem );\
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 4, data ) ) \
+ class... BoostGenericDetailOtherTypenames \
+ > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT \
+( boost_generic_detail_impl_funs_deduce_, BOOST_PP_SEQ_ELEM( 0, data ), elem ) \
+< boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) ) \
+ > \
+, ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 5, data ) ) \
+ BoostGenericDetailOtherTypenames... \
+ > \
+> \
+{ \
+ \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 6, data ) ) \
+ \
+static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > \
+boost_generic_detail_fun_deducer( ... ); \
+ \
+template< class elem > \
+static \
+::boost::generic::detail::type_< elem > \
+boost_generic_detail_fun_deducer \
+( ::boost::generic::detail::type_ \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, data ) ) > \
+); \
+}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_impl_this_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ ) \
+ : ::boost::mpl::identity \
+ < decltype( BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_impl_funs_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ )< BoostGenericDetailParams, BoostGenericDetailTypenames >:: \
+ boost_generic_detail_fun_deducer \
+ ( ::boost::generic::detail::type_ \
+ < typename BOOST_PP_CAT( boost_generic_detail_return_type_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ) \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > \
+ ::type \
+ >() \
+ ) \
+ ) \
+ >::type {}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_this_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ ) \
+ : ::boost::mpl::if_c \
+ < BOOST_PP_CAT( boost_generic_detail_requires_are_valid_ \
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ >::value \
+ , BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_impl_this_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > \
+ , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > \
+ >::type {}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ ) \
+ : ::boost::generic::detail::deduction_result \
+ < typename BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_deduce_ \
+ , BOOST_PP_DEC( BOOST_PP_SEQ_ELEM( 0, data ) ), elem \
+ )< BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_this_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), elem \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > \
+ > {};
+
+#define BOOST_GENERIC_DETAIL_AUGMENT_TYPENAME_PARAMS_MAC( r, aug, elem ) \
+class BOOST_PP_CAT( aug, elem ),
+
+#define BOOST_GENERIC_DETAIL_AUGMENT_TYPENAME_ARGS_MAC( r, aug, elem ) \
+BOOST_PP_CAT( aug, elem ),
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DEDUCE_TYPENAMES_MAC( r, aug, elem ) \
+typedef BOOST_PP_CAT( aug, elem ) elem;
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_EMPTY( \
+ param_dets\
+ , i \
+ , return_type\
+ , expression \
+ , num_fun \
+ , typename_p \
+ , typename_a \
+ , num_reqs \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_NONEMPTY( \
+ param_dets\
+ , i \
+ , return_type\
+ , expression \
+ , num_fun \
+ , typename_p \
+ , typename_a \
+ , num_reqs \
+ ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_1 \
+( BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_MAC \
+, (num_fun) \
+ (return_type) \
+ (num_reqs) \
+ (param_dets) \
+ (( BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+ ( BOOST_GENERIC_DETAIL_AUGMENT_TYPENAME_PARAMS_MAC, BoostGenericDetailAug \
+ , typename_a \
+ ) \
+ )) \
+ (( BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+ ( BOOST_GENERIC_DETAIL_AUGMENT_TYPENAME_ARGS_MAC, BoostGenericDetailAug \
+ , typename_a \
+ ) \
+ )) \
+ (( BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+ ( BOOST_GENERIC_DETAIL_TYPEDEF_DEDUCE_TYPENAMES_MAC, BoostGenericDetailAug\
+ , typename_a \
+ ) \
+ )) \
+, typename_a \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_( \
+ param_dets\
+ , i \
+ , return_type\
+ , expression \
+ , num_fun \
+ , typename_p \
+ , typename_a \
+ , num_reqs \
+ ) \
+ \
+template< class BoostGenericDetailParams \
+ , class BoostGenericDetailTypenames \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_return_type_impl_, num_fun ) \
+{ typedef ::boost::generic::detail::dummy_type type; }; \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_p ) \
+ , class... BoostGenericDetailOtherTypenames \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_return_type_impl_, num_fun ) \
+ < boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( typename_a ) ) \
+ ) \
+ BoostGenericDetailOtherTypenames... \
+ > \
+ , typename ::boost::generic::detail::always_void \
+ < decltype ( expression ) >::type \
+ > { typedef decltype expression type; }; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams \
+ , class BoostGenericDetailTypenames \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_return_type_, num_fun ) \
+ : ::boost::mpl::if_c \
+ < BOOST_PP_CAT( boost_generic_detail_requires_are_valid_, num_reqs ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ >::value \
+ , BOOST_PP_CAT( boost_generic_detail_return_type_impl_, num_fun ) \
+ < BoostGenericDetailParams, BoostGenericDetailTypenames > \
+ , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > \
+ >::type {}; \
+ \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( typename_a ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+, BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_NONEMPTY \
+)( param_dets, i, return_type, expression, num_fun \
+ , typename_p, typename_a, num_reqs \
+ )
+
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF( i, param_dets \
+ , name \
+ , default_ \
+ ,trailing_typename_p\
+ , typename_a \
+ , num_reqs \
+ ) \
+BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED \
+( i, boost_generic_detail_first_pass, name )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED( i, root, name ) \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( root, name ) \
+{ typedef ::boost::generic::detail::dummy_type_< i > type; }; \
+ \
+template< class BoostGenericDetailConceptMap > \
+struct BOOST_PP_CAT( root, name ) \
+ < BoostGenericDetailConceptMap \
+ , typename ::boost::generic::detail::always_void \
+ < typename BoostGenericDetailConceptMap::name >::type \
+ > { typedef typename BoostGenericDetailConceptMap::name type; };
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF_( i, param_dets \
+ , root, name \
+ ) \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( root, name ) \
+{ typedef ::boost::generic::detail::dummy_type_< i > type; }; \
+ \
+template< class BoostGenericDetailConceptMap > \
+struct BOOST_PP_CAT( root, name ) \
+ < BoostGenericDetailConceptMap \
+ , typename ::boost::generic::detail::always_void \
+ < typename BoostGenericDetailConceptMap::name >::type \
+ > { typedef typename BoostGenericDetailConceptMap::name type; };
+
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_WITH_DEF( i, param_dets \
+ , name \
+ , default_ \
+ , trailing_typename_p\
+ , typename_a \
+ , num_reqs \
+ ) \
+BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED \
+( i, boost_generic_detail_provided, name ) \
+ \
+template< class BoostGenericDetailParams \
+ , class BoostGenericDetailTypenames \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_typename_default, name ) \
+{ typedef ::boost::generic::detail::dummy_type_< i > type; }; \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ BOOST_GENERIC_DETAIL_REMOVE_PAREN( trailing_typename_p ) \
+ , class... BoostGenericDetailOtherTypenames \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_typename_default, name ) \
+ < boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( typename_a ) ) \
+ ) \
+ BoostGenericDetailOtherTypenames... \
+ > \
+ , typename ::boost::generic::detail::always_void \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ ) >::type \
+ > \
+{ \
+ typedef BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ ) type; \
+}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams \
+ , class BoostGenericDetailTypenames \
+ , class BoostGenericDetailProvidedName \
+ = typename BOOST_PP_CAT( boost_generic_detail_provided, name ) \
+ < BoostGenericDetailConceptMap >::type \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ : ::boost::mpl::if_c \
+ < ::boost::mpl::and_ \
+ < ::boost::generic::detail::is_dummy_type \
+ < BoostGenericDetailProvidedName > \
+ , BOOST_PP_CAT( boost_generic_detail_requires_are_valid_, num_reqs ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > \
+ >::value \
+ , BOOST_PP_CAT( boost_generic_detail_typename_default, name ) \
+ < BoostGenericDetailParams, BoostGenericDetailTypenames > \
+ , ::boost::mpl::identity< BoostGenericDetailProvidedName > \
+ >::type {};
+
+// BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY takes:
+// ()
+// -or-
+// (default_)
+// if (), it yields nothing
+// else, it yields = default_
+#define BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( def_or_empty_in_paren ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( def_or_empty_in_paren ) \
+ , BOOST_PP_EMPTY \
+ , BOOST_GENERIC_DETAIL_EQ_DEFAULT \
+ ) def_or_empty_in_paren
+
+#define BOOST_GENERIC_DETAIL_EQ_DEFAULT( ... ) = __VA_ARGS__
+
+// ToDo: Possibly check axiom syntax somewhere
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORaxiom( state, concept_, dets, i \
+ , arg \
+ ) \
+state
+
+#define BOOST_GENERIC_DETAIL_EMULATOR_REQUIRES_ARE_VALID( state, dets, i, arg \
+ , trailing_typename_p \
+ , typename_a \
+ ) \
+template< class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ , class = void \
+ > \
+struct BOOST_PP_CAT \
+ ( boost_generic_detail_impl_requires_are_valid_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+ ) : ::std::integral_constant< bool, false > {}; \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( dets ) \
+ BOOST_GENERIC_DETAIL_REMOVE_PAREN( trailing_typename_p ) \
+ , class... BoostGenericDetailOtherTypenames \
+ > \
+struct BOOST_PP_CAT \
+ ( boost_generic_detail_impl_requires_are_valid_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+ ) \
+ < boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( dets ) > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) ) \
+ ) \
+ ) \
+ BoostGenericDetailOtherTypenames... \
+ > \
+ , typename ::boost::generic::detail::always_void \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) >::type \
+ > \
+ : ::boost::generic::detail::concept_is_valid \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) > {}; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailParams, class BoostGenericDetailTypenames \
+ > \
+struct BOOST_PP_CAT \
+ ( boost_generic_detail_requires_are_valid_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+ ) \
+ : ::boost::mpl::and_ \
+ < BOOST_PP_CAT \
+ ( boost_generic_detail_requires_are_valid_ \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) \
+ ) \
+ < BoostGenericDetailConceptMap \
+ , BoostGenericDetailParams, BoostGenericDetailTypenames \
+ > \
+ , BOOST_PP_CAT \
+ ( boost_generic_detail_impl_requires_are_valid_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+ ) \
+ < BoostGenericDetailParams, BoostGenericDetailTypenames > \
+ > {};
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_NO_DEF( params, name \
+ , typename_a \
+ ) \
+typedef typename BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ < BoostGenericDetailConceptMap >::type name;
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_WITH_DEF( params, name \
+ , typename_a \
+ ) \
+typedef typename BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( params ) > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( typename_a ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( typename_a ) ) \
+ ) void****** \
+ > \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES( params, name, default_ \
+ , typename_a \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( default_ ) \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_NO_DEF \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_WITH_DEF \
+ )( params, name, typename_a )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORrequires( state, concept_, dets, i\
+ , arg \
+ ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPE_METAFUNCTIONS \
+ (state) \
+ BOOST_GENERIC_DETAIL_EMULATOR_REQUIRES_ARE_VALID \
+ ( state, dets, i, arg \
+ ,( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+ ) \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ ) \
+ ) \
+) \
+BOOST_PP_SEQ_SUBSEQ( state, 1, 3 ) \
+(( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ BOOST_GENERIC_DETAIL_REQUIRES_STATIC_ASSERT( arg ) \
+ ) \
+) \
+BOOST_PP_SEQ_SUBSEQ( state, 5, 2 ) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+) \
+BOOST_PP_SEQ_REST_N( 8, state )
+
+#define BOOST_GENERIC_DETAIL_EMULATOR_FIRST_PASS_TYPE_META( dets, i, name \
+ , default_ \
+ , trailing_typename_p\
+ , typename_a \
+ , num_reqs \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( default_ ) \
+ , BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF \
+ , BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_WITH_DEF \
+ )( i, dets, name, default_ \
+ , trailing_typename_p, typename_a, num_reqs \
+ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_DUMMY_DEDUCER( name, num_funs ) \
+template< class, class, class > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_deduce_, num_funs, name ) \
+{ \
+ typedef ::boost::generic::detail::no_deduction type; \
+}; \
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORtypename( state, concept_, dets, i\
+ , name, default_ \
+ ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPE_METAFUNCTIONS \
+ ( state ) \
+ BOOST_GENERIC_DETAIL_EMULATOR_FIRST_PASS_TYPE_META \
+ ( dets, i, name, default_ \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+ ) \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES(state) \
+ ) \
+ ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPEDEFS( state ) \
+ BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES \
+ ( dets, name, default_ \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ ) \
+ ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_DUMMY_DEDUCER \
+ ( name, BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+)) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_MAP_BODY( state ) \
+ BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEF \
+ ( name, dets \
+ , (BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state )) \
+ ) \
+)) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ BOOST_GENERIC_DETAIL_EMULATOR_STATIC_ASSERT_TYPENAME( concept_, name ) \
+)) \
+(( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS(state) \
+ , class name \
+)) \
+(( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_ARGS(state) \
+ , name \
+)) \
+BOOST_PP_SEQ_SUBSEQ( state, 7, 2 ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_deduction_error< name > \
+))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORconstrained_typename( state \
+ , concept_ \
+ , dets, i \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPE_METAFUNCTIONS \
+ ( state ) \
+ BOOST_GENERIC_DETAIL_EMULATOR_FIRST_PASS_TYPE_META \
+ ( dets, i, name, default_ \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+ ) \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES(state) \
+ ) \
+ BOOST_GENERIC_DETAIL_EMULATOR_REQUIRES_ARE_VALID \
+ ( state, dets, i, ( constraint< name > ) \
+ ,( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+ , class name \
+ ) \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) \
+ BOOST_PP_COMMA_IF \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_ARGS \
+ ( state ) \
+ ) \
+ ) \
+ ) name \
+ ) \
+ ) \
+ ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPEDEFS( state ) \
+ BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES \
+ ( dets, name, default_ \
+ , ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+ ) \
+ ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_DUMMY_DEDUCER \
+ ( name, BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+)) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_MAP_BODY( state ) \
+ BOOST_GENERIC_DETAIL_ACTUAL_TYPEDEF \
+ ( name, dets \
+ , (BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state )) \
+ ) \
+)) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ BOOST_GENERIC_DETAIL_EMULATOR_STATIC_ASSERT_CONSTRAINED_TYPENAME \
+ ( concept_, name, constraint ) \
+)) \
+(( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS(state) \
+ , class name \
+)) \
+(( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_ARGS(state) \
+ , name \
+)) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state ) ) \
+) \
+(BOOST_PP_SEQ_ELEM( 8, state )) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_deduction_error< name > \
+))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORmember_typename( state, concept_ \
+ , dets, i \
+ , this_type, name \
+ , default_ \
+ ) \
+state
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORconstrained_member_typename( \
+ state \
+ , concept_ \
+ , dets, i \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ ) \
+state
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERT_STRINGIZE_EXPAND( ... ) __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORfunction( state, concept_, dets, i\
+ , return_type, name \
+ , param_dets, default_ \
+ ) \
+BOOST_PP_SEQ_SUBSEQ( state, 0, 2 ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ template< class BoostGenericDetailBoostGenericDetailT > \
+ friend typename ::boost::disable_if_c \
+ < sizeof( BoostGenericDetailBoostGenericDetailT ) \
+ == sizeof( BoostGenericDetailBoostGenericDetailT ) \
+ >::type name(); \
+ BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+ ( state, dets, i, return_type \
+ , ( name(BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets)) ) \
+ ) \
+)) \
+(BOOST_PP_SEQ_ELEM( 3, state )) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ static_assert \
+ ( ::boost::generic::detail::is_not_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ >::value \
+ , "requires " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+ ); \
+ static_assert \
+ ( ::boost::mpl::or_ \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+ >::value \
+ , "the return type of " BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " ) " \
+ "is not convertible to " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ ); \
+)) \
+BOOST_PP_SEQ_SUBSEQ( state, 5, 3 ) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_dummy_type \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state )) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+))
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN( state\
+ , concept_, dets \
+ , i, return_type \
+ , default_, expression \
+ , assert_msg \
+ ) \
+BOOST_PP_SEQ_SUBSEQ( state, 0, 2 ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+ ( state, dets, i, return_type \
+ , expression \
+ ) \
+)) \
+(BOOST_PP_SEQ_ELEM( 3, state )) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ static_assert \
+ ( ::boost::generic::detail::is_not_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ >::value \
+ , "requires " \
+ assert_msg \
+ ); \
+)) \
+BOOST_PP_SEQ_SUBSEQ( state, 5, 3 ) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_dummy_type \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ > \
+))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN( state, concept_, dets \
+ , i, return_type \
+ , default_, expression \
+ , assert_msg \
+ , return_assert_msg \
+ ) \
+BOOST_PP_SEQ_SUBSEQ( state, 0, 2 ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+ ( state, dets, i, return_type \
+ , expression \
+ ) \
+)) \
+(BOOST_PP_SEQ_ELEM( 3, state )) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ static_assert \
+ ( ::boost::generic::detail::is_not_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ >::value \
+ , "requires " \
+ assert_msg \
+ ); \
+ static_assert \
+ ( ::boost::mpl::or_ \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+ >::value \
+ , "the return type of " return_assert_msg " is not convertible to " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type \
+ ); \
+)) \
+BOOST_PP_SEQ_SUBSEQ( state, 5, 3 ) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_dummy_type \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state )) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORmember_function( state, concept_ \
+ , dets, i \
+ , return_type \
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN \
+( state, concept_, dets, i, return_type, default_ \
+, ( ::std::declval< BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) >() \
+ .name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORstatic_member_function( \
+ state \
+ , concept_ \
+ , dets, i \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN \
+( state, concept_, dets, i, return_type, default_ \
+, ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ ::name(BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets)) \
+ ) \
+, " static " BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_PP_STRINGIZE( name ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP( state, concept_, dets \
+ , i, return_type \
+ , operator_, param_dets \
+ , default_, expression \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN \
+( state, concept_, dets, i, return_type, default_ \
+, expression \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " operator " \
+ BOOST_PP_STRINGIZE( operator_ ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+, "operator " \
+ BOOST_PP_STRINGIZE( operator_ ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORprefix_unary_operator( state \
+ , concept_ \
+ , dets, i \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, operator_, param_dets, default_ \
+, ( operator_ \
+ BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORpostfix_unary_operator( state \
+ , concept_ \
+ , dets, i \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, operator_, param_dets, default_ \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ operator_ \
+ ) \
+)
+
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORbinary_operator( state, concept_ \
+ , dets, i \
+ , return_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, operator_, param_dets, default_ \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ operator_ \
+ BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORcall_operator( state, concept_ \
+ , dets, i \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, (), param_dets, default_ \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FUN_CALL_DECLVAL_ARGS \
+ ( param_dets ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORcomma_operator( state, concept_ \
+ , dets, i \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_SEQ_SUBSEQ( state, 0, 2 ) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state ) \
+ BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+ ( state, dets, i, return_type \
+ , ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 ) \
+ ) \
+ ) \
+)) \
+(BOOST_PP_SEQ_ELEM( 3, state )) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state ) \
+ static_assert \
+ ( ::boost::generic::detail::is_not_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ >::value \
+ , "requires " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " operator ,( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+ ); \
+ static_assert \
+ ( ::boost::mpl::or_ \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename boost_generic_detail_concept_impl \
+ ::template BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ))\
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+ >::value \
+ , "the return type of operator ,( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " ) " \
+ "is not convertible to " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ ); \
+)) \
+BOOST_PP_SEQ_SUBSEQ( state, 5, 3 ) \
+(BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+) \
+((BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+ , ::boost::generic::detail::is_not_dummy_type \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state ) ) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ > \
+ , ::boost::generic::detail::is_convertible_or_target_is_void \
+ < typename BOOST_PP_CAT \
+ ( boost_generic_detail_return_type_ \
+ , BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state )) \
+ ) \
+ < boost_generic_detail_completed_concept_map \
+ , boost_generic_detail_params_, boost_generic_detail_typenames \
+ >::type \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+ > \
+))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORarrow_operator( state, concept_ \
+ , dets, i \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, ->, param_dets, default_ \
+, ( ::boost::generic::detail::operator_arrow_fun \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_I( param_dets, 0 ) >() \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORsubscript_operator( state \
+ , concept_ \
+ , dets, i \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_OP \
+( state, concept_, dets, i, return_type, operator_, param_dets, default_ \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ [BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 )] \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_MEMBER_OPERATOR( state, dets, i \
+ , return_type \
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ , expression \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN \
+( state, concept_, dets, i, return_type, default_ \
+, expression \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE return_type " " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::operator " \
+ BOOST_PP_STRINGIZE( operator_ ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::operator " \
+ BOOST_PP_STRINGIZE( operator_ ) "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORassign_operator( state, concept_ \
+ , dets, i \
+ , return_type \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_MEMBER_OPERATOR \
+( state, dets, i, return_type, this_type, =, param_dets, default_ \
+, ( ::std::declval< BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type )& >() \
+ = BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORallocation_operator( state \
+ , concept_ \
+ , dets, i \
+ , return_type \
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_MEMBER_OPERATOR \
+( state, dets, i, return_type, this_type, operator_, param_dets, default_ \
+, ( ::boost::generic::detail::allocation_operator_fun \
+ < ::boost::generic::detail:: \
+ BOOST_PP_CAT( allocation_operator_tag_, operator_ ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( param_dets ) \
+ >() \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORdeallocation_operator( state \
+ , concept_ \
+ , dets, i \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_MEMBER_OPERATOR \
+( state, dets, i, return_type, this_type, operator_, param_dets, default_ \
+, ( ::boost::generic::detail::deallocation_operator_fun \
+ < ::boost::generic::detail:: \
+ BOOST_PP_CAT( deallocation_operator_tag_, operator_ ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( param_dets ) \
+ >() \
+ ) \
+)
+
+// ToDo: Fix this to only construct explicitly if not 1 argument
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORconstructor( state, concept_, dets\
+ , i, this_type \
+ , param_dets, default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN \
+( state, concept_, dets, i, this_type, default_ \
+, ( ( ::boost::generic::detail::constructor_fun \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( param_dets ) > \
+ >() \
+ ) \
+ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORexplicit_constructor( state \
+ , concept_ \
+ , dets, i \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN \
+( state, concept_, dets, i, this_type, default_ \
+, ( ( ::boost::generic::detail::constructor_fun \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ , ::boost::generic::detail::type_list \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( param_dets ) > \
+ >() \
+ ) \
+ ) \
+, "explicit " BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::" \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORdestructor( state, concept_, dets \
+ , i, this_type, default_\
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN \
+( state, concept_, dets, i, ( void ), default_ \
+, ( ::boost::generic::detail::destructor_fun \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) >() \
+ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "::~" \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_type "()" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORconversion( state, concept_, dets \
+ , i, target_type \
+ , param_dets, default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN \
+( state, concept_, dets, i, target_type, default_ \
+, ( ( typename ::std::enable_if \
+ < ::std::is_convertible \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_I( param_dets, 0 ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( target_type ) \
+ >::value \
+ , int \
+ >::type() \
+ ) \
+ ) \
+, "operator " BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE target_type "( " \
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATORexplicit_conversion( state \
+ , concept_ \
+ , dets \
+ , i \
+ , target_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_ASSOC_FUN_UNCHECKED_RETURN \
+( state, concept_, dets, i, target_type, default_ \
+, ( ( typename ::boost::generic::detail::identity_unless_void \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( target_type ) >::type \
+ ) \
+ BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ) \
+, "explicit operator " BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE target_type "( "\
+ BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+ BOOST_GENERIC_DETAIL_WRAP \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) " )" \
+)
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/concept/emulator_state.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept/emulator_state.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,138 @@
+#ifndef BOOST_GENERIC_DETAIL_EMULATOR_STATE_HPP
+#define BOOST_GENERIC_DETAIL_EMULATOR_STATE_HPP
+
+// ToDo: Insert requires checks along the way when doing first pass and second
+// pass typename deduction, otherwise it risks reaching into a concept map
+// that is not valid.
+
+// State structure:
+// ((first_pass_type_metafunctions))
+// ((first_pass_typedefs))
+// ((deducer_helpers))
+// ((concept_map_body))
+// ((concept_body))
+// ((trailing_typename_params))
+// ((trailing_typename_args))
+// (num_requires)
+// (num_functions)
+// ((trailing_is_valid_conditions))
+//
+// typename_base_function_seq is a sequence where each element is:
+// (name)(base_function_number)
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/first_n.hpp>
+#include <boost/preprocessor/seq/rest_n.hpp>
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMPTY_EMULATOR_STATE() \
+(())(())(())(())(())(())(())(0)(0)(())
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPE_METAFUNCTIONS( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_FIRST_PASS_TYPEDEFS( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_DEDUCER_HELPERS( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_MAP_BODY( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 3, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_CONCEPT_BODY( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 4, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 5, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_PARAMS( state ) \
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_PARAMS \
+ ( state ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_ARGS( state )\
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 6, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state )\
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_TYPENAME_ARGS \
+ ( state ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_REQUIRES( state )\
+BOOST_PP_SEQ_ELEM( 7, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_NUM_FUNCTIONS( state )\
+BOOST_PP_SEQ_ELEM( 8, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS(state) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 9, state ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_IS_VALID_CONDITIONS(state) \
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TRAILING_IS_VALID_CONDITIONS \
+ ( state ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_FIRST_PASS_MAC( r, data, name )\
+typename boost_generic_detail_typename_deducers::name,
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_FIRST_PASS( i, seq )\
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_FIRST_PASS_MAC \
+, ~, BOOST_PP_SEQ_REST_N( i, seq ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_EXISTS( i, seq )\
+BOOST_PP_SEQ_ENUM( BOOST_PP_SEQ_FIRST_N( i, seq ) ),
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC( r, data, i, name )\
+typedef typename ::boost::mpl::eval_if_c \
+ < ::boost::generic::detail::is_dummy_type \
+ < typename boost_generic_detail_typename_deducers::name >::value \
+ , BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+ < BoostGenericDetailConceptMap \
+ , boost_generic_detail_params \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+ ( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+ > \
+ , ::boost::generic::detail::type_list \
+ < BOOST_PP_IF \
+ ( i \
+ , BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_EXISTS\
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY\
+ )( i, BOOST_PP_SEQ_ELEM( 1, data ) )\
+ BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC_FIRST_PASS\
+ ( i, BOOST_PP_SEQ_ELEM( 1, data ) )\
+ void********** \
+ > \
+ > \
+ , ::boost::mpl::identity \
+ < typename boost_generic_detail_typename_deducers::name > \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_( params, typename_seq )\
+BOOST_PP_SEQ_FOR_EACH_I\
+( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_MAC\
+, (params)(typename_seq), typename_seq\
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY( state, params )\
+BOOST_PP_IIF\
+( BOOST_GENERIC_DETAIL_IS_EMPTY( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) )\
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY\
+, BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_ACTUAL_CONCEPT_MAP_BODY_\
+)\
+( params \
+, BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_EMULATOR_STATE_TYPENAME_ARGS( state ) ) \
+)
+
+#endif // BOOST_GENERIC_DETAIL_EMULATOR_STATE_HPP

Added: sandbox/generic/include/boost/generic/detail/concept/name_param_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept/name_param_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,177 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_HPP
+
+#if 0
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/error.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+// This macro takes the arguments to a BOOST_GENERIC_CONCEPT invocation and
+// yields information about the concept name and its parameters, and also yields
+// the remaining macro arguments as a sequence.
+// This data is in a sequence of the form:
+// (error_array)(name)(param_details)
+// (remaining_args_seq)(curr_arg_num)
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETS( ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL \
+( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_PARAM_LIST_DETS( dets )\
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_REMAINING_ARGS( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_CURR_ARG_NUM( dets ) \
+BOOST_PP_SEQ_ELEM( 4, dets )
+
+// Takes the args as a sequence
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL( args_as_seq ) \
+BOOST_PP_IIF \
+( BOOST_PP_GREATER \
+ ( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+ , 1 \
+ ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL_VALID_SIZE \
+, BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL_INVALID_SIZE \
+)( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+( BOOST_PP_SEQ_TAIL( args_as_seq ) )( 2 ) \
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL_INVALID_SIZE(head)\
+((1,(BOOST_GENERIC_DETAIL_CONCEPT_ERROR_INVALID_NAME_PARAM_FORMAT( head )))) \
+(invalid_name)(invalid_params)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_IMPL_VALID_SIZE( head )\
+BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS \
+( BOOST_GENERIC_DETAIL_CONCEPT_CHECK_NAME \
+ ( BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( head ) ) \
+, BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( head ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_NAME( head_arg ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( head_arg ) \
+, ((1,(BOOST_GENERIC_DETAIL_CONCEPT_ERROR_PARENTHESIZED_NAME( head_arg )))) \
+ (head_arg) \
+, ((0,()))(head_arg) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS( state, ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL \
+( state, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL( state, param_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_VALID \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_INVALID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_INVALID( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_ERROR_PARAMS_INVALID \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_NOT_PAREN( state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_ERROR_PARAMS_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_INVALID_FORMAT( state \
+ , param_dets\
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_ERROR_INVALID_PARAM_FORMAT \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_VALID(state,param_dets) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( param_dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_VOID \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_NONVOID \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_NONVOID( state \
+ , param_dets \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARE_ALL_CLASS_OR_TYPENAME \
+ ( param_dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_FULLY_VALID \
+, BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PARAMS \
+)( state, param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_NOT_ALL_TYPE_PARAMS( \
+ state \
+ , param_dets \
+ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_ERROR_NONTYPE_PARAMS \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( param_dets ) ) \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_FULLY_VALID( state \
+ , param_dets \
+ ) \
+state \
+( param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_CHECK_PARAMS_IMPL_VOID( state,param_dets )\
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_ERRORS( state ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_ERROR_VOID_PARAMS() \
+ ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_NAME( state ) ) \
+( param_dets )
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept/req_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept/req_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,599 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_REQ_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_REQ_DETS_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/axiom_dets.hpp>
+#include <boost/generic/detail/function_decl_details.hpp>
+#include <boost/generic/detail/no_return_dets.hpp>
+#include <boost/generic/detail/requires_dets.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_error.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/ordered_iif.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/typename_details.hpp>
+#include <boost/generic/detail/wrap.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+
+// requirement_seq_dets is a sequence of requirement specifications
+// Each element of the sequence is of the form:
+// ( id_name )( simplified_details )
+//
+// id_name is one of: and simplified_details is:
+// axiom ( everything )
+//
+// requires ( requirement )
+//
+// typename ( name
+// , def_or_empty_in_paren
+// )
+//
+// constrainted_typename ( constraint, name
+// , def_or_empty_in_paren
+// )
+//
+// member_typename ( this_type_in_paren, name
+// , def_or_empty_in_paren
+// )
+//
+// constrainted_member_typename ( constraint
+// , this_type_in_paren, name
+// , def_or_empty_in_paren
+// )
+//
+// function ( return_type_in_paren
+// , name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// member_function ( return_type_in_paren
+// , this_type_in_paren, name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// static_member_function ( return_type_in_paren
+// , this_type_in_paren, name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// prefix_unary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// postfix_unary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// binary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// call_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// comma_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// arrow_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// assign_operator ( return_type_in_paren
+// , this_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// allocation_operator ( return_type_in_paren
+// , this_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// deallocation_operator ( return_type_in_paren
+// , this_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// constructor ( this_type_in_paren, param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// explicit_constructor ( this_type_in_paren, param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// destructor ( this_type_in_paren
+// , def_or_empty_in_paren
+// )
+//
+// conversion ( target_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// explicit_conversion ( target_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// type_template ( param_list_dets, name )
+//
+// error ( error_message_in_quotes )
+//
+// "details" are the details corresponding to that parameter
+// requirement_seq_dets may be empty, in which case there are no params
+//
+// error_msg_seq is either empty or a sequence of c-strings representing errors
+#define BOOST_GENERIC_DETAIL_REQ_DETS( ... ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 0 )\
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_VALID_EMPTY \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL \
+ )( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_VALID_EMPTY( ... ) \
+(1)(())
+
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_VISIT(dets, macro_base, index_base, data)\
+BOOST_PP_SEQ_FOR_EACH_I \
+( BOOST_GENERIC_DETAIL_REQ_DETS_VISIT_IMPL \
+, (macro_base)(index_base)(data) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_REQUIREMENTS( dets ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_FOLD( dets, macro_base, concept_ \
+ , param_dets, index_base, state \
+ ) \
+BOOST_PP_SEQ_ELEM \
+( 1, BOOST_PP_SEQ_FOLD_LEFT \
+ ( BOOST_GENERIC_DETAIL_REQ_DETS_FOLD_IMPL \
+ , (macro_base)(state)(concept_)(param_dets)(index_base) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_REQUIREMENTS( dets ) \
+ ) \
+)
+
+// ToDo: Get rid of the add! Rewrite to use inc instead
+#define BOOST_GENERIC_DETAIL_REQ_DETS_VISIT_IMPL( r, data, i, elem ) \
+BOOST_GENERIC_DETAIL_SELF \
+( BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( 0, data ), BOOST_PP_SEQ_ELEM( 0, elem ) ) \
+ BOOST_GENERIC_DETAIL_SELF \
+ ( ( BOOST_PP_ADD( BOOST_PP_SEQ_ELEM( 1, data ), i ) \
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, elem ) ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_FOLD_IMPL( s, state, elem ) \
+(BOOST_PP_SEQ_ELEM( 0, state )) \
+(BOOST_GENERIC_DETAIL_SELF \
+ ( BOOST_GENERIC_DETAIL_REQ_DETS_FOLD_IMPL_ \
+ ( BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( 0, state ) \
+ , BOOST_PP_SEQ_ELEM( 0, elem ) \
+ ) \
+ , BOOST_PP_SEQ_ELEM( 1, state ) \
+ , BOOST_PP_SEQ_ELEM( 2, state ) \
+ , BOOST_PP_SEQ_ELEM( 3, state ) \
+ , BOOST_PP_SEQ_ELEM( 4, state ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, elem ) ) \
+ ) \
+ ) \
+) \
+(BOOST_PP_SEQ_ELEM( 2, state ))(BOOST_PP_SEQ_ELEM( 3, state )) \
+(BOOST_PP_INC(BOOST_PP_SEQ_ELEM( 4, state )))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_FOLD_IMPL_( macro, ... ) \
+macro BOOST_GENERIC_DETAIL_WRAP( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_VALID_EMPTY( ... ) \
+(1)(())
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL( args ) \
+BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_WHILE_STATE_TO_DETS \
+( BOOST_PP_WHILE \
+ ( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_PRED \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_OP \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAMS_INITIAL_STATE \
+ ( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( args ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_REQUIREMENTS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_WHILE_STATE_TO_DETS( state ) \
+(BOOST_PP_COMPL(BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_HAS_ERRORS(state))) \
+((BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_DETS(state)))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_CURR_INDEX( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_SEQ( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_HAS_ERRORS( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_PRED( d, state ) \
+BOOST_PP_COMPL \
+( BOOST_PP_BITOR \
+ ( BOOST_PP_EQUAL \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_CURR_INDEX( state ) ) \
+ , BOOST_GENERIC_DETAIL_SEQ_SIZE \
+ ( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_SEQ( state ) ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_HAS_ERRORS( state ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_OP( d, state ) \
+BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_OP_IMPL \
+( state \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_CURR_INDEX( state ) ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_SEQ( state ) \
+ ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_OP_IMPL( state, dets ) \
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_CURR_INDEX( state ) ) ) \
+( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_SEQ( state ) ) \
+( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_DETS(state)(dets) ) \
+( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAGGED_DETS_IS_ERROR( dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAMS_INITIAL_STATE( seq ) \
+BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAMS_INITIAL_STATE_IMPL \
+( seq \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAMS_INITIAL_STATE_IMPL(seq, dets)\
+(0) \
+(seq) \
+((dets)) \
+( BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAGGED_DETS_IS_ERROR( dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAGGED_DETS_TAG( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAGGED_DETS_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAGGED_DETS_IS_ERROR( dets ) \
+BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR( BOOST_PP_SEQ_ELEM( 0, dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_AXIOM( dets ) \
+(axiom) \
+( ( (BOOST_GENERIC_DETAIL_AXIOM_DETS_ARG(dets)) ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_AXIOM_PARTIAL( dets ) \
+(error)(BOOST_GENERIC_DETAIL_AXIOM_DETS_ERROR(dets))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_REQUIRES( dets ) \
+(requires) \
+( ( (BOOST_GENERIC_DETAIL_REQUIRES_DETS_CONCEPT_REQ(dets)) ) )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_REQUIRES_PARTIAL( dets ) \
+(error)(BOOST_GENERIC_DETAIL_REQUIRES_DETS_ERROR(dets))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_TYPENAME( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_TYPENAME \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_TYPENAME \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_TYPENAME( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_CONSTRAINED( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRAINED_MEM_TYPENAME \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_UNCONSTRAINED_MEM_TYPENAME\
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_TYPENAME( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_CONSTRAINED( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRAINED_TYPENAME \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_UNCONSTRAINED_TYPENAME \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_UNCONSTRAINED_TYPENAME( dets ) \
+(typename) \
+( ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+ , ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRAINED_TYPENAME( dets ) \
+(constrained_typename) \
+( ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_CONSTRAINT( dets ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+ , ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_UNCONSTRAINED_MEM_TYPENAME(dets)\
+(member_typename) \
+( ( ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+ , ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRAINED_MEM_TYPENAME( dets )\
+(constrained_member_typename) \
+( ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_CONSTRAINT( dets ) \
+ , ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+ , ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_TYPENAME_PARTIAL( dets ) \
+(error)(BOOST_GENERIC_DETAIL_TYPENAME_DETS_ERROR(dets))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_FUNCTION( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_OPERATOR \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONOPERATOR \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONOPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_FUNCTION \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_FUNCTION \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_FUNCTION( dets ) \
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_STATIC( dets ) \
+ , static_member_function \
+ , member_function \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_FUNCTION( dets ) \
+(function) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_OPERATOR \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_OPERATOR \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_MEMBER_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_ASSIGN \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets ) ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_ASSIGN_OPERATOR \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONASSIGN_MEMBER_OPERATOR \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONASSIGN_MEMBER_OPERATOR(dets )\
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_ASSIGN_OPERATOR( dets ) \
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_NONBASIC_OP \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets ) ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONBASIC_OPERATOR \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_OPERATOR_ \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONBASIC_OPERATOR( dets ) \
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONMEMBER_OPERATOR_( dets ) \
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_FUNCTION_PARTIAL( dets ) \
+(error)(BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERROR(dets))
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NO_RETURN( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRUCTOR \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONCONSTRUCTOR \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NONCONSTRUCTOR( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( dets ) \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_DESTRUCTOR \
+ , BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONVERSION \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONSTRUCTOR( dets ) \
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( dets ) \
+ , explicit_constructor \
+ , constructor \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_PARAM_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_DESTRUCTOR( dets ) \
+(destructor) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_CONVERSION( dets ) \
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( dets ) \
+ , explicit_conversion \
+ , conversion \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_TARGET_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_PARAM_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL( elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( elem ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL_PAREN \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL_NOT_PAREN \
+)( elem )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_PARAM_DETS_IMPL_PAREN(elem) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_1 \
+( elem \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_UNRECOGNIZED_PARAM \
+, (BOOST_GENERIC_DETAIL_WRAPPED_REQUIRES_DETS) \
+ (BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_REQUIRES) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_TYPENAME_DETS) \
+ (BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_TYPENAME) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_AXIOM_DETS) \
+ (BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_AXIOM) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_NO_RETURN_DETS) \
+ (BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_NO_RETURN) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_FUNCTION_DECL_DETS) \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_FUNCTION) \
+)
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_AXIOM( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_AXIOM \
+, BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_AXIOM_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_REQUIRES( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_REQUIRES \
+, BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_REQUIRES_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_TYPENAME( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_TYPENAME \
+, BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_TYPENAME_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_FUNCTION( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_FUNCTION \
+, BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_FUNCTION_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_NO_RETURN( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_REQ_DETS_IMPL_TAG_NO_RETURN \
+, BOOST_GENERIC_DETAIL_REQ_DETS_ANALYZE_NO_RETURN_PARTIAL \
+)( dets )
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_REQ_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_and_params_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_and_params_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,75 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETAILS_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Checks if he argument matches the form (text)(nonempty,text)
+// Gracefully handles if the argument is not a sequence or if there is more data
+// after the last parameter
+// Yields details in the form:
+// (is_valid_bit)(concept_name_in_parentheses)(params_in_parentheses)
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_DETS( __VA_ARGS__ ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL( seq_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( seq_dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_IS_SEQ \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID( ... ) \
+(0) \
+((invalid_concept_name_and_params_declaration)) \
+((invalid_concept_name_and_params_declaration))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_IS_SEQ( seq ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_SIZE( seq ), 2 ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_SEQ_2 \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID \
+ )( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( seq ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_SEQ_2( nonvarseq ) \
+( BOOST_PP_COMPL \
+ ( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM( 0, nonvarseq ) ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM( 1, nonvarseq ) ) \
+ ) \
+ ) \
+ ) \
+) \
+( BOOST_PP_SEQ_ELEM( 0, nonvarseq ) ) \
+( BOOST_PP_SEQ_ELEM( 1, nonvarseq ) )
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_impl_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_impl_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,35 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_IMPL_OF_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_IMPL_OF_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+//#include <type_traits>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class T >
+struct concept_impl_of
+{
+ static bool const is_specialized = false;
+ static bool const is_auto = false;
+
+// struct type
+// {
+// template< class >
+// struct boost_generic_detail_is_valid : std::false_type {};
+// };
+};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_IMPL_OF_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_is_valid.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_is_valid.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_IS_VALID_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_IS_VALID_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/detail/concept_impl_of.hpp>
+#include <boost/generic/detail/concept_map_template.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class ConceptAndParams >
+struct concept_is_valid_impl
+ : concept_impl_of< ConceptAndParams >::type::
+ template boost_generic_detail_is_valid< ConceptAndParams > {};
+
+// ToDo: Create a default here that pulls the proper concept map
+template< class ConceptAndParams >
+struct concept_is_valid
+ : mpl::and_< boost::mpl::bool_
+ < ::boost_generic_concept_map_detail::concept_map_
+ < ConceptAndParams >::is_usable
+ >
+ , concept_is_valid_impl< ConceptAndParams >
+ > {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_IS_VALID_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map/arg_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map/arg_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,189 @@
+/*==============================================================================
+ Copyright (c) 2010, 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_MAP_ARG_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_ARG_DETS_HPP
+
+#include <boost/generic/detail/concept_map/body_dets.hpp>
+#include <boost/generic/detail/concept_map/concept_and_params_dets.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/num_args_is_1.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/generic/detail/template_decl_details.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS( ... ) \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_IMPL \
+( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS_IS_VALID(dets) \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS( dets ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_DETS(dets)\
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_DETS( dets ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_ARGS( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_DETS( dets ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS( dets ) \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_ \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_DETS( dets ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT( dets ) \
+< BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_PARAMS( dets ) >
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_PARAMS \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_CONCEPT_AND_PARAMS_DETS \
+ ( dets ) \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_BODY_DETS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 3, dets ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_HAS_BODY( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_BODY_DETS( dets ) ) \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_VISIT_BODY( dets, macro_base \
+ , data \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_HAS_BODY( dets ) \
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_VISIT_BODY_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets, macro_base, data )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_VISIT_BODY_( dets, macro_base\
+ , data \
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_VISIT \
+( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_BODY_DETS( dets ) \
+, macro_base \
+, BOOST_PP_INC \
+ ( BOOST_PP_INC \
+ ( BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_TEMPLATE_DETS_IS_VALID(dets) ) \
+ ) \
+, data \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_IMPL( template_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( template_dets )\
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE \
+ , BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_NO_TEMPLATE \
+ )( template_dets, __VA_ARGS__ )
+
+// ToDo: Gracefully handle no tail arguments
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE(template_dets, ...)\
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE_ \
+( template_dets, BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE_(template_dets,...)\
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE_IMPL \
+( template_dets \
+, BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_WITH_TEMPLATE_IMPL( template_dets\
+ , concept_and_params_dets\
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID \
+ ( concept_and_params_dets ) \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_OPENER \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_INVALID_OPENER \
+)( template_dets, concept_and_params_dets, 3, __VA_ARGS__ )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_NO_TEMPLATE( template_dets, ... )\
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_NO_TEMPLATE_ \
+( template_dets \
+, BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_NO_TEMPLATE_( \
+ template_dets \
+ , concept_and_params_dets\
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID \
+ ( concept_and_params_dets ) \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_OPENER \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_INVALID_OPENER \
+)( template_dets, concept_and_params_dets, 2, __VA_ARGS__ )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_OPENER( \
+ template_dets \
+ , concept_and_params_dets\
+ , curr_param_index \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( __VA_ARGS__ ) \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_EMPTY \
+, BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_NONEMPTY \
+)( template_dets, concept_and_params_dets, 2, __VA_ARGS__ )
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_NONEMPTY( \
+ template_dets \
+ , concept_and_params_dets\
+ , curr_param_index \
+ , ... \
+ ) \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_NONEMPTY_ \
+( template_dets, concept_and_params_dets, curr_param_index \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS \
+ ( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) ) \
+)
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_NONEMPTY_( \
+ template_dets \
+ , concept_and_params_dets\
+ , base_param_index \
+ , body_dets \
+ ) \
+(BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( body_dets )) \
+(template_dets)(concept_and_params_dets)((body_dets))
+
+#define BOOST_GENERIC_CONCEPT_MAP_DETAIL_IMPL_VALID_EMPTY( \
+ template_dets \
+ , concept_and_params_dets\
+ , curr_param_index \
+ , ... \
+ ) \
+(1)(template_dets)(concept_and_params_dets)(())("No opener error.")
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_ARG_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map/body_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map/body_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,480 @@
+/*==============================================================================
+ Copyright (c) 2010, 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/concept_map/typedef_dets.hpp>
+#include <boost/generic/detail/function_decl_details.hpp>
+#include <boost/generic/detail/no_return_dets.hpp>
+#include <boost/generic/detail/is_error.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/ordered_iif.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+
+// satisfier_seq_dets is a sequence of requirement specifications
+// Each element of the sequence is of the form:
+// ( id_name )( simplified_details )
+//
+// id_name is one of: and simplified_details is:
+// typedef ( everything )
+//
+// function ( return_type_in_paren
+// , name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// member_function ( return_type_in_paren
+// , this_type_in_paren, name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// static_member_function ( return_type_in_paren
+// , this_type_in_paren, name
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// prefix_unary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// postfix_unary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// binary_operator ( return_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// call_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// comma_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// arrow_operator ( return_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// assign_operator ( return_type_in_paren
+// , this_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// allocation_operator ( return_type_in_paren
+// , this_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// deallocation_operator ( return_type_in_paren
+// , this_type_in_paren
+// , operator
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// constructor ( this_type_in_paren, param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// explicit_constructor ( this_type_in_paren, param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// destructor ( this_type_in_paren
+// , def_or_empty_in_paren
+// )
+//
+// conversion ( target_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// explicit_conversion ( target_type_in_paren
+// , param_list_dets
+// , def_or_empty_in_paren
+// )
+//
+// type_template ( param_list_dets, name )
+//
+// error ( error_message_in_quotes )
+//
+// "details" are the details corresponding to that parameter
+// requirement_seq_dets may be empty, in which case there are no params
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS( ... ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 0 )\
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_INVALID_EMPTY \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL \
+ )( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_INVALID_EMPTY( ... ) \
+(0)(())("Empty Parameter")
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_VISIT( dets, macro_base \
+ , index_base, data \
+ ) \
+BOOST_PP_SEQ_FOR_EACH_I \
+( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_VISIT_IMPL \
+, (macro_base)(index_base)(data) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_SATISFIERS( dets ) \
+)
+
+// ToDo: Get rid of the add! Rewrite to use inc instead
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_VISIT_IMPL( r, data, i \
+ , elem \
+ ) \
+BOOST_GENERIC_DETAIL_SELF \
+( BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( 0, data ), BOOST_PP_SEQ_ELEM( 0, elem ) ) \
+ BOOST_GENERIC_DETAIL_SELF \
+ ( ( BOOST_PP_ADD( BOOST_PP_SEQ_ELEM( 1, data ), i ) \
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, elem ) ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_VALID_EMPTY( ... ) \
+(1)(())
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL( args ) \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_WHILE_STATE_TO_DETS \
+( BOOST_PP_WHILE \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_PRED \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_OP \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAMS_INITIAL_STATE \
+ ( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( args ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_SATISFIERS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_WHILE_STATE_TO_DETS( \
+ state\
+ ) \
+( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_HAS_ERRORS( state ) ) \
+) \
+( ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_DETS( state ) ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_CURR_INDEX( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_SEQ( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_HAS_ERRORS( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_PRED( d, state ) \
+BOOST_PP_COMPL \
+( BOOST_PP_BITOR \
+ ( BOOST_PP_EQUAL \
+ ( BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_CURR_INDEX( state ) ) \
+ , BOOST_GENERIC_DETAIL_SEQ_SIZE \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_SEQ( state ) ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_HAS_ERRORS( state ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_OP( d, state ) \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_OP_IMPL \
+( state \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM \
+ ( BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_CURR_INDEX( state ) )\
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_SEQ( state ) \
+ ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_OP_IMPL( state \
+ , dets \
+ ) \
+( BOOST_PP_INC \
+ ( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_CURR_INDEX( state ) ) \
+) \
+( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_SEQ( state ) ) \
+( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_DETS(state)(dets) ) \
+( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAGGED_DETS_IS_ERROR( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAMS_INITIAL_STATE( \
+ seq\
+ ) \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAMS_INITIAL_STATE_IMPL \
+( seq \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAMS_INITIAL_STATE_IMPL(seq, dets)\
+(0) \
+(seq) \
+((dets)) \
+( BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAGGED_DETS_IS_ERROR( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAGGED_DETS_TAG( dets )\
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAGGED_DETS_DETS(dets) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAGGED_DETS_IS_ERROR( \
+ dets\
+ ) \
+BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR( BOOST_PP_SEQ_ELEM( 0, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_TYPEDEF( dets ) \
+(typedef) \
+( ( ( BOOST_GENERIC_DETAIL_TYPEDEF_DETS_DEFINITION( dets ) ) ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_TYPEDEF_PARTIAL( \
+ dets\
+ ) \
+(error)( BOOST_GENERIC_DETAIL_TYPEDEF_DETS_ERROR( dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_FUNCTION( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_OPERATOR \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONOPERATOR \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONOPERATOR( dets )\
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_MEMBER_FUNCTION \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONMEMBER_FUNCTION \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_MEMBER_FUNCTION( \
+ dets\
+ ) \
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_STATIC( dets ) \
+ , static_member_function \
+ , member_function \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONMEMBER_FUNCTION(\
+ dets\
+ ) \
+(function) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_MEMBER_OPERATOR \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONMEMBER_OPERATOR \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_MEMBER_OPERATOR( \
+ dets\
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_ASSIGN \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets ) ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_ASSIGN_OPERATOR \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONASSIGN_MEMBER_OPERATOR\
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONASSIGN_MEMBER_OPERATOR(dets )\
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_ASSIGN_OPERATOR( \
+ dets\
+ ) \
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONMEMBER_OPERATOR(\
+ dets\
+ ) \
+(BOOST_GENERIC_DETAIL_OPERATOR_KIND \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets )) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_FUNCTION_PARTIAL( \
+ dets\
+ ) \
+(error)(BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERROR(dets))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NO_RETURN( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_CONSTRUCTOR \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONCONSTRUCTOR \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NONCONSTRUCTOR( \
+ dets\
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_DESTRUCTOR \
+ , BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_CONVERSION \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_CONSTRUCTOR( dets )\
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( dets ) \
+ , explicit_constructor \
+ , constructor \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_PARAM_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_DESTRUCTOR( dets ) \
+(destructor) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE( dets ) ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_CONVERSION( dets ) \
+(BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( dets ) \
+ , explicit_conversion \
+ , conversion \
+ ) \
+) \
+( ( ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_TARGET_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_PARAM_DETS( dets ) \
+ , ( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL( elem )\
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( elem ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL_PAREN \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL_NOT_PAREN \
+)( elem )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_PARAM_DETS_IMPL_PAREN( \
+ elem\
+ ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_1 \
+( elem \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_UNRECOGNIZED_PARAM \
+, (BOOST_GENERIC_DETAIL_WRAPPED_TYPEDEF_DETS) \
+ (BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_TYPEDEF) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_NO_RETURN_DETS) \
+ (BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_NO_RETURN) \
+, (BOOST_GENERIC_DETAIL_WRAPPED_FUNCTION_DECL_DETS) \
+ (BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_FUNCTION) \
+)
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_TYPEDEF( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_TYPEDEF \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_TYPEDEF_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_FUNCTION( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_FUNCTION \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_FUNCTION_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_NO_RETURN( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IMPL_TAG_NO_RETURN \
+, BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_ANALYZE_NO_RETURN_PARTIAL \
+)( dets )
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map/concept_and_params_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map/concept_and_params_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,67 @@
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_MAP_CONCEPT_AND_PARAMS_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_CONCEPT_AND_PARAMS_DETS_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Checks if he argument matches the form (text)(nonempty,text)
+// Gracefully handles if the argument is not a sequence or if there is more data
+// after the last parameter
+// Yields details in the form:
+// (is_valid_bit)(concept_name_in_parentheses)(params_in_parentheses)
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_DETS( __VA_ARGS__ ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL( seq_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( seq_dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_IS_SEQ \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID( ... ) \
+(0) \
+((invalid_concept_name_and_params_declaration)) \
+((invalid_concept_name_and_params_declaration))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_IS_SEQ( seq ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_SIZE( seq ), 2 ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_SEQ_2 \
+ , BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_INVALID \
+ )( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( seq ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IMPL_SEQ_2( nonvarseq ) \
+( BOOST_PP_COMPL \
+ ( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM( 0, nonvarseq ) ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM( 1, nonvarseq ) ) \
+ ) \
+ ) \
+ ) \
+) \
+( BOOST_PP_SEQ_ELEM( 0, nonvarseq ) ) \
+( BOOST_PP_SEQ_ELEM( 1, nonvarseq ) )
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_CONCEPT_AND_PARAMS_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map/map_specifier_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map/map_specifier_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,161 @@
+#ifndef BOOST_GENERIC_DETAIL_MAP_SPECIFIER_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIER_VISITOR_HPP
+
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#define BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( def_or_empty_in_paren ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( def_or_empty_in_paren ) \
+ , BOOST_PP_IDENTITY(;) \
+ , BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON_ \
+ ) def_or_empty_in_paren
+
+#define BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON_( ... ) __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERtypedef( i, d, typedef_ ) \
+typedef BOOST_GENERIC_DETAIL_REMOVE_PAREN( typedef_ );
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERfunction( i, d, return_type, name \
+ , param_dets, definition \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS( param_dets, name ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERmember_function( i, d \
+ , return_type \
+ , this_type \
+ , name \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS \
+( param_dets, name ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERstatic_member_function( i, d \
+ , return_type \
+ , this_type \
+ , name \
+ , param_dets \
+ , definition \
+ ) \
+static \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIERmember_function \
+( i, d, return_type, this_type, name, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR( i, d, return_type \
+ , operator_ \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIERfunction \
+( i, d, return_type, operator operator_, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERprefix_unary_operator \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERbinary_operator \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERcall_operator( i, d, return_type \
+ , param_dets, definition\
+ ) \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR \
+( i, d, return_type, (), param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERcomma_operator( i, d, return_type \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) operator , \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERarrow_operator( i, d, return_type \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_BASIC_OPERATOR \
+( i, d, return_type, ->, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIER_MEMBER_OPERATOR( i, d, return_type \
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIERmember_function \
+( i, d, return_type, this_type, operator operator_, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERassign_operator( i, d, return_type \
+ , this_type \
+ , param_dets \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_MEMBER_OPERATOR \
+( i, d, return_type, this_type, =, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERallocation_operator \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERdeallocation_operator \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIER_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERconstructor( i, d, this_type \
+ , param_dets, definition \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERexplicit_constructor( i, d, this_type\
+ , param_dets \
+ , definition \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIERconstructor \
+( i, d, this_type, param_dets, definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERdestructor( i, d, this_type \
+ , definition \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::~BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type )() \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERconversion( i, d, target_type \
+ , param_dets, definition \
+ ) \
+operator BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( target_type )( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) )\
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_DEFINITION_OR_SEMICOLON( definition )
+
+#define BOOST_GENERIC_DETAIL_MAP_SPECIFIERexplicit_conversion( i, d \
+ , target_type \
+ , param_dets \
+ , definition \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_MAP_SPECIFIERconversion \
+( i, d, target_type, param_dets, definition )
+
+#endif // BOOST_GENERIC_DETAIL_MAP_SPECIFIER_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map/typedef_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map/typedef_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,78 @@
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_MAP_TYPEDEF_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_TYPEDEF_DETS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Yields result in the format:
+// (validity_bit)(partial_bit)((def))(error_in_quotes)
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEF( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_IMPL_NOT_TYPEDEF \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_TYPEDEF_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_TYPEDEF_DETS wrapped_arg
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_ \
+( BOOST_GENERIC_DETAIL_EAT_TYPEDEF( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ )\
+ , BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_EMPTY_OR_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_VALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_VALID( ... ) \
+(1)(1)((__VA_ARGS__))("No error.")
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IMPL_EMPTY_OR_PARENTHESIZED( ... ) \
+(0)(1)(())("Invalid typedef.")
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_IMPL_NOT_TYPEDEF( ... ) \
+(0)(0)(())("Not a typedef.")
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_DEFINITION( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_DETS_STATEMENT( dets ) \
+typedef BOOST_GENERIC_DETAIL_TYPEDEF_DETS_DEFINITION( dets );
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEF( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEF_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEF_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEF \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPEDEFtypedef ,
+
+#define BOOST_GENERIC_DETAIL_EAT_TYPEDEF( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_TYPEDEF, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_TYPEDEFtypedef
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_TYPEDEF_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map_impl.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_DETAIL_CONCEPT_MAP_IMPL_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_IMPL_HPP
+
+//#include <type_traits>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class ConceptAndParams >
+struct concept_map_impl
+ : std::conditional< concept_impl_of< ConceptAndParams >::is_auto
+ ,
+{
+ static bool const is_specialized = false;
+ static bool const is_auto = false;
+
+// struct type
+// {
+// template< class >
+// struct boost_generic_detail_is_valid : std::false_type {};
+// };
+};
+
+} } }
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_IMPL_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_map_template.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_map_template.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_MAP_TEMPLATE_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_MAP_TEMPLATE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/detail/concept_impl_of.hpp>
+#include <type_traits>
+
+#endif
+
+namespace boost_generic_concept_map_detail {
+
+template< class ConceptAndParams, class Enabler = void >
+struct concept_map_
+{
+ static bool const is_auto_concept_definition
+ = ::boost::generic::detail::concept_impl_of< ConceptAndParams >
+ ::is_auto,
+ is_usable = is_auto_concept_definition;
+
+ struct boost_generic_concept_map_impl {};
+
+ template< class BoostGenericDetailDummy = int >
+ struct instantiate
+ {
+ static_assert( sizeof( BoostGenericDetailDummy )
+ != sizeof( BoostGenericDetailDummy )
+ , "No matching concept map."
+ );
+ typedef ::std::true_type instantiate_;
+ };
+};
+
+}
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_MAP_TEMPLATE_HPP

Added: sandbox/generic/include/boost/generic/detail/concept_sig_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concept_sig_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,92 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_HPP
+
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Checks if the argument matches the form (text)(param list) nothing here
+// Gracefully handles if the argument is not a sequence or if there is more data
+// after the last parameter
+// Yields details in the form:
+// (is_valid_bit)(concept_name_in_parentheses)(param_dets)
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( ... ) \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_DETS( __VA_ARGS__ ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_CONCEPT( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_PARAM_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL( seq_dets, ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( seq_dets ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_IS_SEQ \
+ , BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_INVALID( ... ) \
+(0) \
+((invalid_concept_sig)) \
+((invalid_concept_sig))
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_IS_SEQ( seq ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_SIZE( seq ), 2 ) \
+ , BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_SEQ_2 \
+ , BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_INVALID \
+ )( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( seq ) )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_SEQ_2( nonvarseq ) \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_SEQ_2_IMPL \
+( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, nonvarseq ) ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( BOOST_PP_SEQ_ELEM( 1, nonvarseq ) ) \
+)
+
+// ToDo: Require typename/class parameters when in emulated mode
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_SEQ_2_IMPL(name,param_dets) \
+BOOST_PP_IIF \
+( BOOST_PP_BITAND \
+ ( BOOST_PP_BITAND \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+ , BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( param_dets ) ) \
+ ) \
+ , BOOST_PP_COMPL \
+ ( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY( name ) \
+ , BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( name ) \
+ ) \
+ ) \
+ ) \
+, BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_VALID_PARAMS \
+, BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_INVALID \
+)( name, param_dets )
+
+#define BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IMPL_VALID_PARAMS( name \
+ , param_dets \
+ ) \
+( 1 ) \
+( name ) \
+( param_dets )
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/concepts_are_modeled.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/concepts_are_modeled.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+#ifndef BOOST_GENERIC_DETAIL_CONCEPTS_ARE_MODELED_HPP
+#define BOOST_GENERIC_DETAIL_CONCEPTS_ARE_MODELED_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/detail/type.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class ConceptMap
+ , class... ConceptAndParams
+ >
+struct concepts_are_modeled
+{
+ static_assert( sizeof( ConceptMap ) != sizeof( ConceptMap )
+ , "Library error. Contact maintainer."
+ );
+};
+
+template< class ConceptMap
+ , class FirstConceptAndParams
+ , class... ConceptAndParams
+ >
+struct concepts_are_modeled
+ < ConceptMap, FirstConceptAndParams, ConceptAndParams... >
+ : mpl::and_< concepts_are_modeled< ConceptMap, FirstConceptAndParams >
+ , concepts_are_modeled< ConceptMap, ConceptAndParams... >
+ > {};
+
+template< class ConceptMap
+ , class ConceptAndParams
+ >
+struct concepts_are_modeled< ConceptMap, ConceptAndParams >
+ : concept_impl_of< ConceptAndParams >::type::
+ template boost_generic_detail_is_valid< ConceptAndParams, ConceptMap > {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_CONCEPTS_ARE_MODELED_HPP

Added: sandbox/generic/include/boost/generic/detail/deduce_typename_helper_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/deduce_typename_helper_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,338 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_HPP
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_HPP
+
+#include <boost/generic/detail/always_void.hpp>
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/nary_cat.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/type.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <utility>
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS( param_dets\
+ , name_seq \
+ , i \
+ , return_type\
+ , expression \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY( name_seq ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+, BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_ \
+)( param_dets, name_seq, i, return_type, expression )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_MAC( r \
+ , data \
+ , elem \
+ ) \
+static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( boost_generic_detail_fun_deducer_ \
+, BOOST_PP_SEQ_ELEM( 0, data ), _, BOOST_PP_SEQ_ELEM( 0, elem ) \
+) \
+( ... ); \
+ \
+template< class BOOST_PP_SEQ_ELEM( 1, elem ) > \
+static ::boost::generic::detail::type_< BOOST_PP_SEQ_ELEM( 1, elem ) > \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( boost_generic_detail_fun_deducer_ \
+, BOOST_PP_SEQ_ELEM( 0, data ), _, BOOST_PP_SEQ_ELEM( 0, elem ) \
+) \
+BOOST_PP_SEQ_ELEM( 1, data ); \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS \
+ ( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_GENERIC_DETAIL_NARY_CAT( boost_generic_detail_deduce_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), _ \
+ , BOOST_PP_SEQ_ELEM( 0, elem ) \
+ ) \
+ : ::boost::mpl::identity \
+ < decltype( BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_fun_deducer_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ), _ \
+ , BOOST_PP_SEQ_ELEM( 0, elem ) \
+ ) \
+ ( ::boost::generic::detail::void_safe_declval \
+ < typename BOOST_PP_CAT( boost_generic_detail_return_type_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ) \
+ ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+ ( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+ >::type \
+ >() \
+ ) \
+ ) \
+ >::type {};
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_( \
+ param_dets\
+ , name_seq \
+ , i \
+ , return_type\
+ , expression \
+ ) \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_return_type_, i ) \
+{ typedef ::boost::generic::detail::dummy_type type; }; \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) > \
+struct BOOST_PP_CAT( boost_generic_detail_return_type_, i ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) \
+ , typename ::boost::generic::detail::always_void \
+ < decltype expression >::type \
+ > { typedef decltype expression type; }; \
+ \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS_MAC \
+, (i)(return_type)(param_dets) \
+, name_seq \
+)
+
+// Note: d here is:
+// (concept_param_dets)((typename_seq))
+// where typename_seq is either empty or a sequence with each element as:
+// (unique_index)(typename_name)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERrequires( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERtypename( ... )
+
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERconstrained_typename( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERmember_typename( ... )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERconstrained_member_typename(\
+ ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERfunction( i, d, return_type \
+ , name, param_dets \
+ , default_ \
+ ) \
+template< class T > \
+friend typename ::boost::disable_if_c< sizeof(T) == sizeof(T) >::type name(); \
+ \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERmember_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( ::std::declval< BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) >() \
+ .name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets) )\
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+ ::name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS(param_dets) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERprefix_unary_operator( i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( operator_ \
+ BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERpostfix_unary_operator( i, d\
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ operator_ \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERbinary_operator( i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ operator_ \
+ BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FUN_CALL_DECLVAL_ARGS \
+ ( param_dets ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERcomma_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERarrow_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+TODO_DEFINE_THIS
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERsubscript_operator( \
+ i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ [BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 1 )] \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_CREATE_DEDUCERS \
+( BOOST_PP_SEQ_ELEM( 0, d ) \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ), i \
+, return_type \
+, ( ::std::declval< BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type )& >() \
+ = BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( param_dets, 0 ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERallocation_operator( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERdeallocation_operator( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERdestructor( i, d, this_type \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERconversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPERexplicit_conversion( \
+ i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ )
+
+#endif // BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_HELPER_HPP

Added: sandbox/generic/include/boost/generic/detail/deduce_typename_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/deduce_typename_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,105 @@
+#ifndef BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_VISITOR_HPP
+
+// Note: d here is a sequence of id-numbers of with associated functions
+
+#include <boost/generic/detail/deduction_result.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMErequires( ... )
+
+// data here is:
+// (concept_param_dets)(typename_id)
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_MACRO( r, data, fun_id ) \
+typename BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_deduce_, fun_id, _ \
+ , BOOST_PP_SEQ_ELEM( 1, data ) \
+ ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+ ( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+ >::type,
+
+// d here is:
+// (concept_param_dets)((function_id_seq))
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEtypename( i, d, name, default_ ) \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS \
+ ( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+{ \
+ typedef typename ::boost::generic::detail::deduction_result \
+ < ::boost::mpl::vector \
+ < BOOST_PP_SEQ_FOR_EACH \
+ ( BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_MACRO \
+ , (BOOST_PP_SEQ_ELEM( 0, d ))(i) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+ ) \
+ ::boost::generic::detail::dummy_type \
+ > \
+ >::type type; \
+};
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEconstrained_typename( i, d \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEtypename( i, d, name, default_ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEmember_typename( i, d, this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEconstrained_member_typename( \
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEcall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEcomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEsubscript_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_DEDUCE_TYPENAMEexplicit_conversion( ... )
+
+#endif // BOOST_GENERIC_DETAIL_DEDUCE_TYPENAME_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/deduction_result.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/deduction_result.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,117 @@
+#ifndef BOOST_GENERIC_DETAIL_DEDUCTION_RESULT_HPP
+#define BOOST_GENERIC_DETAIL_DEDUCTION_RESULT_HPP
+
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/quote.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+// Error tags
+class no_deduction {};
+class ambiguous_deduction {};
+
+template< class T >
+struct is_not_deduction_error : boost::mpl::true_ {};
+
+template<>
+struct is_not_deduction_error< no_deduction > : mpl::false_ {};
+
+template<>
+struct is_not_deduction_error< ambiguous_deduction > : mpl::false_ {};
+
+template<>
+struct is_dummy_type< no_deduction > : mpl::true_ {};
+
+template< class FirstDeduction >
+struct is_different_deduction_
+{
+ template< class OtherDeduction >
+ struct apply
+ : mpl::not_
+ < mpl::or_
+ < is_dummy_type< OtherDeduction >
+ , is_same< FirstDeduction, OtherDeduction >
+ >
+ > {};
+};
+
+template< class T > struct is_dummy_meta : is_dummy_type< typename T::type > {};
+
+template< class L, class R >
+struct is_same_second_meta : is_same< L, typename R::type > {};
+
+template< class FirstDeduction, class OtherDeductionMeta >
+struct deduction_result
+ : mpl::if_c
+ < is_dummy_type< FirstDeduction >::value
+ , mpl::eval_if
+ < is_dummy_meta< OtherDeductionMeta >
+ , mpl::identity< FirstDeduction >
+ , OtherDeductionMeta
+ >
+ , mpl::eval_if
+ < is_dummy_meta< OtherDeductionMeta >
+ , mpl::identity< FirstDeduction >
+ , mpl::if_< is_same_second_meta< FirstDeduction, OtherDeductionMeta >
+ , FirstDeduction
+ , ambiguous_deduction
+ >
+ >
+ >::type {};
+
+// Takes a sequence and an iterator into that sequence and yields
+// ambiguous_deduction // if there is another deduction to a different type
+template< class Sequence, class FirstDeductionIt >
+struct deduction_result_verifier
+{
+private:
+ typedef typename mpl::deref< FirstDeductionIt >::type first_deduction;
+ typedef typename mpl::next< FirstDeductionIt >::type range_begin;
+ typedef typename mpl::end< Sequence >::type range_end;
+
+ typedef typename mpl::find_if
+ < mpl::iterator_range< range_begin, range_end >
+ , is_different_deduction_< first_deduction >
+ >::type mismatched_deduced_type_it;
+public:
+ typedef typename mpl::if_
+ < is_same< mismatched_deduced_type_it, range_end >
+ , first_deduction
+ , ambiguous_deduction
+ >
+ ::type type;
+};
+
+
+
+template< class Sequence >
+struct deduction_result_
+{
+private:
+ typedef typename mpl::find_if
+ < Sequence, mpl::quote1< is_not_dummy_type > >::type
+ first_deduced_type_it;
+public:
+ typedef typename mpl::eval_if
+ < is_same< first_deduced_type_it
+ , typename mpl::end< Sequence >::type
+ >
+ , mpl::identity< no_deduction >
+ , deduction_result_verifier< Sequence, first_deduced_type_it >
+ >::type type;
+};
+
+} } }
+
+#endif // BOOST_GENERIC_DETAIL_DEDUCTION_RESULT_HPP

Added: sandbox/generic/include/boost/generic/detail/dummy_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/dummy_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,47 @@
+#ifndef BOOST_GENERIC_DETAIL_DUMMY_TYPE_HPP
+#define BOOST_GENERIC_DETAIL_DUMMY_TYPE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/add_rvalue_reference.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <utility>
+
+namespace boost { namespace generic { namespace detail {
+
+struct dummy_type {};
+
+template< class T >
+struct void_safe_declval_result_type
+{
+ typedef typename add_rvalue_reference
+ < typename mpl::if_< is_void< T >, dummy_type, T >::type >::type
+ type;
+};
+
+template< class T >
+typename void_safe_declval_result_type< T >::type void_safe_declval();
+
+template< unsigned UniqueId >
+struct dummy_type_ {};
+
+template< class Type >
+struct is_dummy_type : mpl::false_ {};
+
+template<>
+struct is_dummy_type< dummy_type > : mpl::true_ {};
+
+template< unsigned ID >
+struct is_dummy_type< dummy_type_< ID > > : mpl::true_ {};
+
+template< class Type >
+struct is_not_dummy_type : mpl::not_< is_dummy_type< Type > > {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_DUMMY_TYPE_HPP

Added: sandbox/generic/include/boost/generic/detail/eat.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/eat.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_EAT_HPP
+#define BOOST_GENERIC_DETAIL_EAT_HPP
+
+#define BOOST_GENERIC_DETAIL_EAT( ... )
+
+#define BOOST_GENERIC_DETAIL_EAT_WRAPPED( ... ) \
+BOOST_GENERIC_DETAIL_EAT __VA_ARGS__
+
+#endif // BOOST_GENERIC_DETAIL_EAT_HPP

Added: sandbox/generic/include/boost/generic/detail/eat_part_after_paren.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/eat_part_after_paren.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,29 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN_HPP
+#define BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+
+// Takes text of the form ( data ) post_paren_data
+// yields ( data )
+// post_paren_data may be no text
+#define BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( ... ) \
+BOOST_GENERIC_DETAIL_FIRST_PARAM_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_PARAM_COMMA_SECOND( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PARAM_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_SELF_COMMA( ... ) ( __VA_ARGS__ ),
+
+#define BOOST_GENERIC_DETAIL_PARAM_COMMA_SECOND( ... ) \
+BOOST_GENERIC_DETAIL_SELF_COMMA __VA_ARGS__
+
+#endif // BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN_HPP

Added: sandbox/generic/include/boost/generic/detail/empty_file.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/empty_file.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,7 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/

Added: sandbox/generic/include/boost/generic/detail/error.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/error.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,275 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ERROR_HPP
+#define BOOST_GENERIC_DETAIL_ERROR_HPP
+
+#include <boost/config.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/generic/support.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#ifndef BOOST_NO_STATIC_ASSERT // If static_assert is supported
+
+#define BOOST_GENERIC_DETAIL_ERROR( string_, identifier_ ) \
+static_assert( false, string_ )
+
+#else // Else, static_assert isn't supported so use BOOST_MPL_ASSERT_MSG
+
+#include <boost/mpl/assert.hpp>
+
+#define BOOST_GENERIC_DETAIL_ERROR( string_, identifier_ ) \
+BOOST_MPL_ASSERT_MSG( false, identifier_, () )
+
+#endif // End check for static_assert support
+
+#ifndef BOOST_NO_BOOST_GENERIC // If BOOST_GENERIC is supported
+
+// Error if an argument isn't parenthesized
+#define BOOST_GENERIC_DETAIL_ERROR_NOT_PARENTHESIZED( arg_num, line ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "Argument #" BOOST_PP_STRINGIZE( arg_num ) " of BOOST_GENERIC is not " \
+ "parenthesized: " BOOST_PP_STRINGIZE( line ) \
+, BOOST_PP_CAT \
+ ( BOOST_PP_CAT \
+ ( ARGUMENT_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ) \
+ ) \
+ , _OF_BOOST_GENERIC_IS_NOT_PARENTHESIZED \
+ ) \
+)
+
+// Error if an argument's argument doesn't start with parentheses
+// This is used with try and auto try since they are required to take
+// preprocessor sequences
+#define BOOST_GENERIC_DETAIL_ERROR_ARG_ARG_NOT_PAREN( id ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "A BOOST_GENERIC \"" \
+ BOOST_PP_STRINGIZE( BOOST_GENERIC_DETAIL_SPACED_ID( id ) ) \
+ "\" argument should be a Boost.Preprocessor sequence of expressions" \
+, BOOST_PP_CAT \
+ ( BOOST_PP_CAT( A_BOOST_GENERIC_ \
+ , BOOST_GENERIC_DETAIL_CAPS_ID( id ) \
+ ) \
+ , _ARGUMENT_SHOULD_BE_A_BOOST_PREPROCESSOR_SEQUENCE \
+ ) \
+)
+
+// Error if the function name and parameters are invalid
+#define BOOST_GENERIC_DETAIL_ERROR_INVALID_NAME_AND_PARAMS() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "Invalid function name and parameters passed as the first argument to " \
+ "BOOST_GENERIC", \
+INVALID_FUNCTION_NAME_AND_PARAMS_PASSED_AS_THE_FIRST_ARG_TO_BOOST_GENERIC \
+)
+
+// Error when a parameter kind isn't supported
+#define BOOST_GENERIC_DETAIL_ERROR_NO_PARAM_SUPPORT( id, argnum ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_GENERIC \"" \
+ BOOST_PP_STRINGIZE( BOOST_GENERIC_DETAIL_SPACED_ID( id ) ) \
+ "\" parameters are not supported with this compiler" \
+, BOOST_PP_CAT \
+ ( BOOST_PP_CAT( BOOST_GENERIC_ \
+ , BOOST_GENERIC_DETAIL_CAPS_ID( id ) \
+ ) \
+ , _PARAMETERS_ARE_NOT_SUPPORTED_WITH_THIS_COMPILER \
+ ) \
+)
+
+// Error if "auto explicit" is used without a function body
+#define BOOST_GENERIC_DETAIL_AUTO_EXPLICIT_WITHOUT_BODY( arg_num, line ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "Cannot use \"auto explicit\" without a \"return\" or \"do\"" \
+, CANNOT_USE_AUTO_EXPLICIT_WITHOUT_A_RETURN_OR_DO \
+)
+
+// Error when multiple arguments of a particular category are encountered
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_OF_CATEGORY(cat,argnum,first) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_, cat )( argnum, first )
+
+// Error if an unrecognized parameter ID is encountered
+#define BOOST_GENERIC_DETAIL_ERROR_UNRECOGNIZED_PARAM_ID( arg_num, line ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "Unrecognized parameter ID used with argument #" \
+ BOOST_PP_STRINGIZE( arg_num ) \
+ " of BOOST_GENERIC: " BOOST_PP_STRINGIZE( line ) \
+, BOOST_PP_CAT \
+ ( BOOST_PP_CAT \
+ ( UNRECOGNIZED_PARAMETER_ID_USED_WITH_ARGUMENT_ \
+ , BOOST_PP_SEQ_ELEM( 0, data ) \
+ ) \
+ , _OF_BOOST_GENERIC \
+ ) \
+)
+
+// Error if break is specified without an explicit result type
+#define BOOST_GENERIC_DETAIL_ERROR_END_WITHOUT_RESULT_TYPE() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "Cannot end a BOOST_GENERIC without a deducible result type " \
+ "(provide a function body with \"return\" or \"do\", or specify a result " \
+ "type with \"explicit\")" \
+, CANNOT_END_A_BOOST_GENERIC_WITHOUT_A_DEDUCIBLE_RESULT_TYPE \
+)
+
+// Error when multiple explicit result types are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_explicit( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one \"explicit\" or \"virtual explicit\" specified for " \
+ "BOOST_GENERIC (argument #" BOOST_PP_STRINGIZE( arg_number ) \
+ " conflicts with argument #" BOOST_PP_STRINGIZE( first ) ")" \
+, MORE_THAN_ONE_EXPLICIT_OR_VIRTUAL_EXPLICIT_WITH_BOOST_GENERIC \
+)
+
+// Error when multiple if[_not] are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_if( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one \"if\" or \"not\" specified for BOOST_GENERIC (argument" \
+ " #" BOOST_PP_STRINGIZE( arg_number ) " conflicts with argument # " \
+ BOOST_PP_STRINGIZE( arg_number ) "): To require multiple conditions, combine"\
+ " them together with && or ::boost::mpl::and_" \
+, MORE_THAN_ONE_IF_OR_NOT_WITH_BOOST_GENERIC \
+)
+
+// Error when multiple try are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_try( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one \"try\" specified for BOOST_GENERIC: (argument #" \
+ BOOST_PP_STRINGIZE( arg_number ) " conflicts with argument #" \
+ BOOST_PP_STRINGIZE( first ) "): To require multiple expressions, use a " \
+ "Boost.Preprocessor sequence" \
+, MORE_THAN_ONE_TRY_WITH_BOOST_GENERIC \
+)
+
+// Error when multiple try are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_auto_try( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one \"auto try\" specified for BOOST_GENERIC: (argument #" \
+ BOOST_PP_STRINGIZE( arg_number ) " conflicts with argument #" \
+ BOOST_PP_STRINGIZE( first ) "): To require multiple expressions, use a " \
+ "Boost.Preprocessor sequence" \
+, MORE_THAN_ONE_AUTO_TRY_WITH_BOOST_GENERIC \
+)
+
+// Error when multiple return type requirements are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_auto_if( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one \"auto if\" or \"auto not\" specified for " \
+ "BOOST_GENERIC: (argument #" BOOST_PP_STRINGIZE( arg_number ) \
+ " conflicts with argument #" BOOST_PP_STRINGIZE( first ) "): To require " \
+ "multiple conditions for the return type, combine them together with " \
+ " ::boost::mpl::and_" \
+, MORE_THAN_ONE_AUTO_IF_OR_AUTO_NOT_WITH_BOOST_GENERIC \
+)
+
+// Error when multiple function bodies requirements are specified
+#define BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_do( arg_number, first ) \
+BOOST_GENERIC_DETAIL_ERROR \
+( "More than one function body specified for BOOST_GENERIC (argument #" \
+ BOOST_PP_STRINGIZE( arg_number ) " conflicts with argument #" \
+ BOOST_PP_STRINGIZE( first ) ")" \
+, MORE_THAN_ONE_FUNCTION_BODY_SPECIFIED_FOR_BOOST_GENERIC \
+)
+
+#else // Else, BOOST_GENERIC is not supported
+
+// Start a series of checks for why BOOST_GENERIC isn't supported
+#ifdef BOOST_NO_VARIADIC_MACROS
+
+#define BOOST_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_GENERIC requires variadic macro support from the compiler" \
+, BOOST_GENERIC_REQUIRES_VARIADIC_MACRO_SUPPORT_FROM_THE_COMPILER \
+)
+
+#elif defined( BOOST_NO_TRAILING_RETURN_TYPE )
+
+#define BOOST_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_GENERIC requires trailing return type support from the compiler" \
+, BOOST_GENERIC_REQUIRES_TRAILING_RETURN_TYPE_SUPPORT_FROM_THE_COMPILER \
+)
+
+#elif defined( BOOST_NO_DECLTYPE )
+
+#define BOOST_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_GENERIC requires decltype support from the compiler" \
+, BOOST_GENERIC_REQUIRES_DECLTYPE_SUPPORT_FROM_THE_COMPILER \
+)
+
+#else // Otherwise, we don't have a specific message for why it's not supported
+
+#define BOOST_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_GENERIC is not supported on this compiler" \
+, BOOST_GENERIC_IS_NOT_SUPPORTED_ON_THIS_COMPILER \
+)
+
+#endif // End checks for why BOOST_GENERIC isn't supported
+
+#endif // End check for BOOST_GENERIC support
+
+// If BOOST_BASIC_GENERIC is not supported
+#ifdef BOOST_NO_BOOST_BASIC_GENERIC
+
+// Start a series of checks for why BOOST_BASIC_GENERIC isn't supported
+#ifdef BOOST_NO_VARIADIC_MACROS
+
+#define BOOST_BASIC_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_BASIC_GENERIC requires variadic macro support from the compiler" \
+, BOOST_BASIC_GENERIC_REQUIRES_VARIADIC_MACRO_SUPPORT_FROM_THE_COMPILER \
+)
+
+#elif defined( BOOST_NO_TRAILING_RETURN_TYPE )
+
+#define BOOST_BASIC_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_BASIC_GENERIC requires trailing return type support from the " \
+ "compiler" \
+, BOOST_BASIC_GENERIC_REQUIRES_TRAILING_RETURN_TYPE_SUPPORT_FROM_THE_ \
+ ## COMPILER \
+)
+
+#elif defined( BOOST_NO_DECLTYPE )
+
+#define BOOST_BASIC_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_BASIC_GENERIC requires decltype support from the compiler" \
+, BOOST_BASIC_GENERIC_REQUIRES_DECLTYPE_SUPPORT_FROM_THE_COMPILER \
+)
+
+#else // Otherwise, we don't have a specific message for why it's not supported
+
+#if BOOST_NO_BOOST_GENERIC_PARAM( do )
+
+#define BOOST_BASIC_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_BASIC_GENERIC requires \"do\" parameter support with " \
+ "BOOST_GENERIC" \
+, BOOST_BASIC_GENERIC_REQUIRES_DO_PARAMETER_SUPPORT_WITH_BOOST_AUTO_ \
+ ## FUNCTION \
+)
+
+#else // Otherwise, we don't have a specific message for why it's not supported
+
+#define BOOST_BASIC_GENERIC_DETAIL_NO_SUPPORT_ERROR() \
+BOOST_GENERIC_DETAIL_ERROR \
+( "BOOST_BASIC_GENERIC is not supported on this compiler" \
+, BOOST_BASIC_GENERIC_IS_NOT_SUPPORTED_ON_THIS_COMPILER \
+)
+
+#endif // End check for do parameter support
+
+#endif // End checks for why BOOST_BASIC_GENERIC is not supported
+
+#endif // End check for BOOST_BASIC_GENERIC support
+
+#endif // BOOST_GENERIC_DETAIL_ERROR_HPP

Added: sandbox/generic/include/boost/generic/detail/error_info.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/error_info.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,297 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ERROR_INFO_HPP
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/array_to_seq.hpp>
+#include <boost/generic/detail/error.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/is_recognized_arg.hpp>
+#include <boost/generic/detail/is_valid_name_and_params.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/generic/detail/param_id_category_value.hpp>
+#include <boost/generic/detail/param_id_implies_parentheses.hpp>
+#include <boost/generic/support.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/array/data.hpp>
+#include <boost/preprocessor/array/push_back.hpp>
+#include <boost/preprocessor/array/size.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+
+// Takes in the parameters passed to BOOST_GENERIC as a sequence. The
+// sequence should not include the initial argument of concept name.
+// It yields a sequence of 3 element tuples of an argument number of the error
+// message as a string, and an identifier-format error message
+// ToDo: Handle no errors
+#define BOOST_GENERIC_DETAIL_CONCEPT_ERROR_INFO( ... ) \
+BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL \
+( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+// Check the first argument (the parameters) for errors
+#define BOOST_GENERIC_DETAIL_CHECK_FIRST_ARG( first_arg ) \
+BOOST_GENERIC_DETAIL_CHECK_FIRST_ARG_IMPL \
+( BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( first_arg ) \
+ , (0)((0,())) \
+ , (1)((1,(BOOST_GENERIC_DETAIL_INVALID_CONCEPT_PARAMS_ERROR()))) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY() \
+BOOST_PP_REPEAT \
+( BOOST_GENERIC_DETAIL_NUM_PARAM_CATEGORIES \
+, BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO \
+, ~ \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY_MACRO( z, n, t ) \
+((0))
+
+#define BOOST_GENERIC_DETAIL_CHECK_FIRST_ARG_IMPL( first_arg_errors ) \
+( BOOST_PP_SEQ_ELEM( 0, first_arg_errors ) )( 2 ) \
+ ( BOOST_GENERIC_DETAIL_PARAM_CATEGORY_BIT_TABLE_EMPTY() ) \
+( BOOST_PP_SEQ_ELEM( 1, first_arg_errors ) )
+
+// Same as above only it yields an array instead of a sequence
+// State is a sequence of:
+// A bit specifying if a fatal error was encountered
+// (in which case we don't try to parse any more arguments)
+//
+// A value specifying the current argument number
+// (starts at 2 since error handling for the first arg is handled elsewhere)
+//
+// A sequence of sequences of category info where the first element is a
+// bit that specifies whether or not the category was encountered. If and
+// only if the first element is 1, there is a second element which
+// specifies the line number where the first occurrence of the category
+// appeared
+//
+// An array of errors
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL( args_as_seq ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE( args_as_seq ), 1 ) \
+ , BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL_SIZE_1 \
+ , BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL_NOT_SIZE_1 \
+ )( args_as_seq )
+
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL_SIZE_1( args_as_seq ) \
+BOOST_PP_SEQ_ELEM \
+( 3, BOOST_GENERIC_DETAIL_CHECK_FIRST_ARG \
+ ( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_IMPL_NOT_SIZE_1( args_as_seq ) \
+BOOST_PP_SEQ_ELEM \
+( 3, BOOST_PP_SEQ_FOLD_LEFT \
+ ( BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO \
+ , BOOST_GENERIC_DETAIL_CHECK_FIRST_ARG \
+ ( BOOST_PP_SEQ_HEAD( args_as_seq ) ) \
+ , BOOST_PP_SEQ_TAIL( args_as_seq ) \
+ ) \
+)
+
+// Invoked when no error is found (updates line counter and categories)
+#define BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT( data, elem ) \
+( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+( BOOST_PP_INC( BOOST_PP_SEQ_ELEM( 1, data ) ) ) \
+( BOOST_PP_SEQ_REPLACE \
+ ( BOOST_PP_SEQ_ELEM( 2, data ) \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , ( 1 )( BOOST_PP_SEQ_ELEM( 1, data ) ) \
+ ) \
+) \
+( BOOST_PP_SEQ_ELEM( 3, data ) )
+
+// Update the "fold" state when we hit an argument that should take a sequence
+// but it is detected that the argument does not have parentheses
+#define BOOST_GENERIC_DETAIL_ARG_ARG_NOT_PAREN_INFO( data, elem ) \
+( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+( BOOST_PP_INC( BOOST_PP_SEQ_ELEM( 1, data ) ) ) \
+( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) \
+ , BOOST_GENERIC_DETAIL_ERROR_ARG_ARG_NOT_PAREN \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+ ) \
+)
+
+// Update the "fold" state when we hit an argument that duplicates a
+// category that was already encountered
+#define BOOST_GENERIC_DETAIL_DUPLICATE_CATEGORY_INFO( data, elem ) \
+( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+( BOOST_PP_INC( BOOST_PP_SEQ_ELEM( 1, data ) ) ) \
+( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) \
+ , BOOST_GENERIC_DETAIL_ERROR_MULTIPLE_OF_CATEGORY \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( elem ) \
+ , BOOST_PP_SEQ_ELEM( 1, data ) \
+ , BOOST_PP_SEQ_ELEM \
+ ( 1 \
+ , BOOST_PP_SEQ_ELEM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem ) \
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ ) \
+ ) \
+ ) \
+ ) \
+)
+
+// Update the "fold" state when we hit an argument that wasn't parenthesized
+// An argument that isn't parenthesized is a fatal error and we can't parse
+// anything after that since we can't know whether or not commas there are
+// intended to end that argument or if they are supposed to be a part of that
+// argument
+#define BOOST_GENERIC_DETAIL_NOT_PARENTHESIZED( data, elem ) \
+( 1 ) \
+( ~ ) \
+( ~ ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) \
+ , BOOST_GENERIC_DETAIL_ERROR_NOT_PARENTHESIZED \
+ ( BOOST_PP_SEQ_ELEM( 1, data ), elem ) \
+ ) \
+)
+
+// Update the "fold" state when we hit an unrecognized param id
+#define BOOST_GENERIC_DETAIL_UNRECOGNIZED_ARG( data, elem ) \
+( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+( BOOST_PP_INC( BOOST_PP_SEQ_ELEM( 1, data ) ) ) \
+( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) \
+ , BOOST_GENERIC_DETAIL_ERROR_UNRECOGNIZED_PARAM_ID \
+ ( BOOST_PP_SEQ_ELEM( 1, data ), elem ) \
+ ) \
+)
+
+// On a fatal error don't bother trying to parse any more arguments
+#define BOOST_GENERIC_DETAIL_FORWARD_FATAL_ERROR( data, elem ) data
+
+// Determines if the category of this argument has already appeared
+#define BOOST_GENERIC_DETAIL_IS_DUPLICATE_CATEGORY( data, elem ) \
+BOOST_PP_SEQ_ELEM \
+( 0 \
+, BOOST_PP_SEQ_ELEM( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( elem )\
+ , BOOST_PP_SEQ_ELEM( 2, data ) \
+ ) \
+)
+
+// Update the "fold" state when we hit a parameter kind that we can't support
+#define BOOST_GENERIC_DETAIL_ERROR_NO_SUPPORT_INFO( data, elem ) \
+( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+( BOOST_PP_INC( BOOST_PP_SEQ_ELEM( 1, data ) ) ) \
+( BOOST_PP_SEQ_ELEM( 2, data ) ) \
+( BOOST_PP_ARRAY_PUSH_BACK \
+ ( BOOST_PP_SEQ_ELEM( 3, data ) \
+ , BOOST_GENERIC_DETAIL_ERROR_NO_PARAM_SUPPORT \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) \
+ , BOOST_PP_SEQ_ELEM( 1, data ) \
+ ) \
+ ) \
+)
+
+// Checks starting after we have recognized the parameter kind
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_RECOGNIZED( data, elem ) \
+BOOST_PP_IIF \
+( BOOST_NO_BOOST_GENERIC_CONCEPT_PARAM \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID( elem ) ) \
+, BOOST_GENERIC_DETAIL_ERROR_NO_SUPPORT_INFO \
+, BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_SUPPORTED \
+)( data, elem )
+
+// Checks starting after we have determined that the parameter kind is supported
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_SUPPORTED( data, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_DUPLICATE_CATEGORY( data, elem ) \
+, BOOST_GENERIC_DETAIL_DUPLICATE_CATEGORY_INFO \
+, BOOST_GENERIC_DETAIL_ERROR_NO_DUPLICATE \
+)( data, elem )
+
+#define BOOST_GENERIC_DETAIL_LACKS_PARENT_FOR_ARG( data, elem ) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES( elem ) \
+, BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_PARAM( elem ) ) \
+ ) \
+)
+
+// Checks starting after we have determined that there is not a duplicate
+#define BOOST_GENERIC_DETAIL_ERROR_NO_DUPLICATE( data, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_LACKS_PARENT_FOR_ARG( data, elem ) \
+, BOOST_GENERIC_DETAIL_ARG_ARG_NOT_PAREN_INFO \
+, BOOST_GENERIC_DETAIL_NO_ERROR_WITH_ARGUMENT \
+)( data, elem )
+
+// Checks starting after it is established that the argument is parenthesized
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_PARENTHESIZED( data, elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( elem ) \
+, BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_RECOGNIZED \
+, BOOST_GENERIC_DETAIL_UNRECOGNIZED_ARG \
+)( data, elem )
+
+// data is a 2 element tuple of the current argument number and an array of
+// tuples of argument numbers and the associated unrecognized argument
+// ToDo: Push off some of the checks to other macros to prevent errors when not
+// parenthesized properly or when there are too many commas
+#define BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO( s, data, elem ) \
+BOOST_PP_IIF \
+( BOOST_PP_SEQ_ELEM( 0, data ) \
+, BOOST_GENERIC_DETAIL_FORWARD_FATAL_ERROR \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( elem ) \
+ , BOOST_GENERIC_DETAIL_ERROR_INFO_MACRO_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_NOT_PARENTHESIZED \
+ ) \
+)( data, elem )
+
+// Yields 1 if there were errors, otherwise it yields 0
+#define BOOST_GENERIC_DETAIL_HAS_ERRORS( error_array ) \
+BOOST_PP_BOOL( BOOST_PP_ARRAY_SIZE( error_array ) )
+
+// Yields all errors as statements
+#define BOOST_GENERIC_DETAIL_EMIT_ERRORS( error_array ) \
+BOOST_PP_IF( BOOST_PP_ARRAY_SIZE( error_array ) \
+ , BOOST_GENERIC_DETAIL_EMIT_ERRORS_IMPL \
+ , BOOST_GENERIC_DETAIL_EMIT_NO_ERRORS_IMPL \
+ )( error_array )
+
+// Do nothing if there are no errors to emit
+#define BOOST_GENERIC_DETAIL_EMIT_NO_ERRORS_IMPL( error_array )
+
+// Yields all errors as statements (only valid if array size is greater than 1)
+#define BOOST_GENERIC_DETAIL_EMIT_ERRORS_IMPL( error_array ) \
+void BOOST_PP_CAT( failed_concept_on_line_, __LINE__ )(); \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_EMIT_ERROR_IMPL, ~ \
+, BOOST_GENERIC_DETAIL_ARRAY_TO_SEQ( error_array ) \
+)
+
+// Yields an error as a statement
+#define BOOST_GENERIC_DETAIL_EMIT_ERROR_IMPL( r, dummy, error ) error;
+
+#endif // BOOST_GENERIC_DETAIL_ERROR_INFO_HPP

Added: sandbox/generic/include/boost/generic/detail/first_pass_type_metafun_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/first_pass_type_metafun_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,156 @@
+#ifndef BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_VISITOR_HPP
+
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNrequires( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF( i, param_dets \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED \
+( i, boost_generic_detail_first_pass, name )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED( i, root, name ) \
+template< class BoostGenericDetailConceptMap \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( root, name ) \
+{ typedef ::boost::generic::detail::dummy_type_< i > type; }; \
+ \
+template< class BoostGenericDetailConceptMap > \
+struct BOOST_PP_CAT( root, name ) \
+ < BoostGenericDetailConceptMap \
+ , typename ::boost::generic::detail::always_void \
+ < typename BoostGenericDetailConceptMap::name >::type \
+ > { typedef typename BoostGenericDetailConceptMap::name type; };
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF_( i, param_dets \
+ , root, name \
+ ) \
+template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( root, name ) \
+{ typedef ::boost::generic::detail::dummy_type_< i > type; }; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ > \
+struct BOOST_PP_CAT( root, name ) \
+ < BoostGenericDetailConceptMap \
+ , typename ::boost::generic::detail::always_void \
+ < typename BoostGenericDetailConceptMap::name >::type \
+ > { typedef typename BoostGenericDetailConceptMap::name type; };
+
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_WITH_DEF( i, param_dets \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_PROVIDED \
+( i, boost_generic_detail_provided, name ) \
+ \
+template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ , class BoostGenericDetailProvidedName \
+ = typename BOOST_PP_CAT( boost_generic_detail_provided, name ) \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) \
+ >::type \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+{ typedef BoostGenericDetailProvidedName type; }; \
+ \
+template< class BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ < BoostGenericDetailConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) \
+ , ::boost::generic::detail::dummy_type_< i > \
+ , typename ::boost::generic::detail::always_void \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ ) >::type \
+ > \
+{ \
+ typedef BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ ) type; \
+};
+
+// ToDo: Only do this if a default is not present
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNtypename( i, d, name \
+ , default_ \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( default_ ) \
+ , BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_NO_DEF \
+ , BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_WITH_DEF \
+ )( i, d, name, default_ )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNconstrained_typename( i, d \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNtypename( i, d, name, default_ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNmember_typename( i, d \
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNcall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNcomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNsubscript_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUNexplicit_conversion( ... )
+
+
+#endif // BOOST_GENERIC_DETAIL_FIRST_PASS_TYPE_METAFUN_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/function_checker_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/function_checker_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,209 @@
+#ifndef BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_VISITOR_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERaxiom( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERrequires( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERtypename( i, d, name, default_ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERconstrained_typename( i, d, constraint \
+ , name, default_ \
+ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERmember_typename( i, d, this_type, name \
+ , default_ \
+ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERfunction( i, d, return_type, name \
+ , param_dets, default_ \
+ ) \
+template< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+ , BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+ , class BoostGenericDetailEnabler = void \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ); \
+ \
+template< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+ , BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+ > \
+struct BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ); \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+, typename ::boost::is_convertible< decltype( name( args ) ), return_type >::type \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERmember_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_BASIC_OPERATOR( \
+ i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERprefix_unary_operator \
+BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERbinary_operator \
+BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERcomma_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERarrow_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_MEMBER_OPERATOR( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERallocation_operator \
+BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERdeallocation_operator \
+BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERdestructor( i, d, this_type\
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERconversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_SEQ_ELEM( 0, d ), BOOST_PP_SEQ_ELEM( 1, d ) >
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_CHECKERexplicit_conversion( \
+ i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+, BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>
+
+#endif // BOOST_GENERIC_DETAIL_FUNCTION_CHECKER_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/function_decl_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/function_decl_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,459 @@
+#ifndef BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETAILS_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/operator_dets.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/this_mem_dets.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// ToDo: Add support for trailing return type declarations and templates
+// A function decl is of the form:
+// optional_static (return_type)( name )( params ) qualifiers, {default_impl}
+// Specifiers are optional, and a comma and default implementation is optional
+
+// Result format is
+// (validity_bit)((return_type))(name)(param_list_details)((default_impl_))
+// (is_partial_bit)((error_msg_seq))(nested_name_dets)(operator_dets)
+// default_impl is empty if none is provided, otherwise it's a parenthesized
+// definition
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 1 ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NO_DEF \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NOT_1_PARAM \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_FUNCTION_DECL_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS wrapped_arg
+
+// expands to:
+// macro(validity_bit, (return_type), name, param_list_details
+// , (definition) -or- empty parameter if no defition
+// )
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT( dets, valid_macro \
+ , invalid_macro \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT_IMPL_INVALID \
+ )( dets, valid_macro, invalid_macro )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT_IMPL_VALID( dets \
+ , valid_macro \
+ , invalid_macro\
+ ) \
+valid_macro( ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION_IMPL( dets ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT_IMPL_INVALID( dets \
+ , valid_macro\
+ , inv_macro \
+ ) \
+inv_macro( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERRORS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RAW_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION(dets) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME_ \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RAW_NAME \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME_( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_MEM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION(dets) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_TYPE_( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_MEM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID_WITHOUT_DEFINITION( \
+ dets )\
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( dets ) \
+, BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 5, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_MEM_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 7, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 8, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets ) \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_NAME \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets )\
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_NAME \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_NAME( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_NAME \
+, BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_NAME \
+)( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR \
+)( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR( dets ) \
+BOOST_GENERIC_DETAIL_OPERATOR \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_MEMBER_OPERATOR_NAME( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR( dets ) \
+BOOST_GENERIC_DETAIL_OPERATOR \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NONMEMBER_OPERATOR_NAME( dets ) )
+
+// ToDo: Fix this once static member function requirements are implemented
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_STATIC( dets ) 0
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_THIS_MEM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_OPERATOR( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_MEMBER_FUNCTION( dets ) \
+, BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID \
+, BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID \
+)( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_OPERATOR_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERRORS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 6, dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_ERRORS( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERRORS( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION( dets ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION_IMPL( dets )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION_IMPL( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION_IMPL( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 4, dets ) )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NO_DEF( arg ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_DEF \
+( BOOST_GENERIC_DETAIL_SEQ_DETS( arg ), )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NOT_1_PARAM( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_EMPTY( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_INVALID \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_2_PARAMS \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_2_PARAMS( seq, ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_INVALID \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_DEF \
+)( BOOST_GENERIC_DETAIL_SEQ_DETS( seq ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_DEF( dets, ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_DETS_SIZE( dets ), 3 ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_DEF_IMPL \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_PARTIAL \
+)( BOOST_GENERIC_DETAIL_SEQ_DETS_SEQ( dets ) \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_EXTRA_DATA( dets ) \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_WITH_DEF_IMPL(seq,ex,...) \
+BOOST_PP_IIF \
+( BOOST_PP_BITAND \
+ ( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( BOOST_PP_SEQ_ELEM( 0, seq ) ) ) \
+ , BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( BOOST_PP_SEQ_ELEM( 1, seq ) ), 1 )\
+ ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_CHECK_PARAMS \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_PARTIAL \
+)( seq \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( BOOST_PP_SEQ_ELEM( 2, seq ) ex ) \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_CHECK_PARAMS( seq \
+ , param_dets, ...\
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID_STRUCTURE \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_PARTIAL \
+ )( BOOST_PP_SEQ_ELEM( 0, seq ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, seq ) )\
+ , param_dets \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID_STRUCTURE( \
+ return_type\
+ , name \
+ , param_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID_STRUCTURE_ \
+( return_type, name, param_dets, BOOST_GENERIC_DETAIL_THIS_MEM_DETS( name ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID_STRUCTURE_( \
+ return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets\
+ , ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( this_mem_dets ) \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER \
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER \
+ )( return_type, name, param_dets, this_mem_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER( return_type, name \
+ , param_dets \
+ , this_mem_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_ \
+( return_type, name, param_dets, this_mem_dets \
+, BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS \
+ ( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME( this_mem_dets ) ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_( return_type, name\
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( op_dets ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_OP \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_NONOP \
+)( return_type, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_OP( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+(1) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_NONOP( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets\
+ , op_dets \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( op_dets ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_BADOP \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_VALID \
+)( return_type, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_BADOP( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets\
+ , op_dets \
+ , ... \
+ ) \
+(0) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_MEMBER_VALID( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets\
+ , op_dets \
+ , ... \
+ ) \
+(1) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER_ \
+( return_type, name, param_dets, this_mem_dets \
+, BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( name ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER_( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( op_dets ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER_OP \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONOP \
+)( return_type, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONMEMBER_OP( return_type \
+ , name \
+ , param_dets \
+ , this_mem_dets\
+ , op_dets \
+ , ... \
+ ) \
+(1) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_NONOP( return_type, name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( op_dets ) \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_BADOP \
+, BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID \
+)( return_type, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_BADOP( return_type, name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+(0) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_VALID( return_type, name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets \
+ , ... \
+ ) \
+(1) \
+(return_type) \
+(name) \
+(param_dets) \
+((__VA_ARGS__)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(op_dets)
+
+// ToDo: Chang param dets struct member to invalid params
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_INVALID( ... ) \
+(0) \
+((return_type_of_invalid_function_decl)) \
+(name_of_invalid_function_decl) \
+(()) \
+(()) \
+(0) \
+((("Invalid function declaration.")))
+
+// ToDo: Chang param dets struct member to invalid params
+#define BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IMPL_PARTIAL( ... ) \
+(0) \
+((return_type_of_invalid_function_decl)) \
+(name_of_invalid_function_decl) \
+(()) \
+(()) \
+(1) \
+((("Invalid function declaration.")))
+
+#endif // BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/function_sequence_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/function_sequence_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,54 @@
+#ifndef BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCE_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCE_VISITOR_HPP
+
+// Note: visitation generates a sequence of function ids for typename deduction
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCErequires( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEtypename( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEconstrained_typename( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEmember_typename( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEconstrained_member_typename( ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEfunction( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEmember_function( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEstatic_member_function(i,...) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEprefix_unary_operator( i,... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEpostfix_unary_operator(i,...) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEbinary_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEcall_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEcomma_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEarrow_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEsubscript_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEassign_operator( i, ... ) (i)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEallocation_operator( i, ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEdeallocation_operator(i,...)
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEconstructor( i, ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEexplicit_constructor( i, ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEdestructor( i, ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEconversion( i, ... )
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCEexplicit_conversion( i, ... )
+
+#endif // BOOST_GENERIC_DETAIL_FUNCTION_SEQUENCE_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/head_argument.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/head_argument.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_HPP
+#define BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_HPP
+
+#define BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( args ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT args
+
+#define BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_IMPL( __VA_ARGS__, _0 )
+
+#define BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_IMPL( head, ... ) head
+
+#define BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ )
+
+#endif // BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_HPP

Added: sandbox/generic/include/boost/generic/detail/increment_concept_map_id.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/increment_concept_map_id.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#if BOOST_GENERIC_CONCEPT_MAP_ID() < 8
+# if BOOST_GENERIC_CONCEPT_MAP_ID() < 4
+# if BOOST_GENERIC_CONCEPT_MAP_ID() < 2
+# if BOOST_GENERIC_CONCEPT_MAP_ID() == 0
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 1
+# else
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 2
+# endif
+# else
+# if BOOST_GENERIC_CONCEPT_MAP_ID() == 2
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 3
+# else
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 4
+# endif
+# endif
+# else
+# if BOOST_GENERIC_CONCEPT_MAP_ID() < 6
+# if BOOST_GENERIC_CONCEPT_MAP_ID() == 4
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 5
+# else
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 6
+# endif
+# else
+# if BOOST_GENERIC_CONCEPT_MAP_ID() == 6
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 7
+# else
+# undef BOOST_GENERIC_CONCEPT_MAP_ID
+# define BOOST_GENERIC_CONCEPT_MAP_ID() 8
+# endif
+# endif
+# endif
+#else
+# error Max number of emulated concept maps reached.
+#endif

Added: sandbox/generic/include/boost/generic/detail/instantiate.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/instantiate.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,75 @@
+#ifndef BOOST_GENERIC_DETAIL_INSTANTIATE_HPP
+#define BOOST_GENERIC_DETAIL_INSTANTIATE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/detail/concept_impl_of.hpp>
+#include <boost/generic/detail/concept_map_template.hpp>
+#include <boost/generic/detail/is_concept.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <utility>
+
+namespace boost { namespace generic { namespace detail {
+
+mpl::true_ boost_generic_detail_instantiate_impl( ... );
+
+template< class... ConceptAndParams >
+decltype
+( boost_generic_detail_instantiate_impl
+ ( std::declval< ConceptAndParams >()... )
+)
+instantiate();
+
+template< class Dummy, class... ConceptAndParams >
+decltype
+( boost_generic_detail_instantiate_impl
+ ( std::declval< ConceptAndParams >()... )
+)
+instantiate_with_dummy();
+
+template< class ConceptAndParams >
+decltype
+( boost_generic_detail_instantiate_impl
+ ( std::declval
+ < typename mpl::if_c< concept_impl_of< ConceptAndParams >::is_auto
+ , ConceptAndParams
+ , int
+ >
+ ::type
+ >()
+ )
+)
+instantiate_if_auto();
+
+template< class ConceptAndParams >
+decltype
+( boost_generic_detail_instantiate_impl
+ ( std::declval
+ < typename mpl::if_c< concept_impl_of< ConceptAndParams >::is_auto
+ || concept_impl_of< ConceptAndParams >::is_specialized
+ , ConceptAndParams
+ , int
+ >
+ ::type
+ >()
+ )
+)
+instantiate_if_auto_or_specialized();
+
+template< class... ConceptAndParams >
+decltype
+( boost_generic_detail_instantiate_impl
+ ( std::declval
+ < typename boost_generic_concept_map_detail::concept_map_
+ < ConceptAndParams >::template instantiate<>::instantiate_
+ >()...
+ )
+)
+instantiate_map();
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_INSTANTIATE_HPP

Added: sandbox/generic/include/boost/generic/detail/intercept.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/intercept.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,274 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_INTERCEPT_HPP
+#define BOOST_GENERIC_DETAIL_INTERCEPT_HPP
+
+#include <boost/generic/detail/variadic_cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_INTERCEPT( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT( BOOST_GENERIC_DETAIL_INTERCEPT, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_INTERCEPT0
+#define BOOST_GENERIC_DETAIL_INTERCEPT1
+#define BOOST_GENERIC_DETAIL_INTERCEPT2
+#define BOOST_GENERIC_DETAIL_INTERCEPT3
+#define BOOST_GENERIC_DETAIL_INTERCEPT4
+#define BOOST_GENERIC_DETAIL_INTERCEPT5
+#define BOOST_GENERIC_DETAIL_INTERCEPT6
+#define BOOST_GENERIC_DETAIL_INTERCEPT7
+#define BOOST_GENERIC_DETAIL_INTERCEPT8
+#define BOOST_GENERIC_DETAIL_INTERCEPT9
+#define BOOST_GENERIC_DETAIL_INTERCEPT10
+#define BOOST_GENERIC_DETAIL_INTERCEPT11
+#define BOOST_GENERIC_DETAIL_INTERCEPT12
+#define BOOST_GENERIC_DETAIL_INTERCEPT13
+#define BOOST_GENERIC_DETAIL_INTERCEPT14
+#define BOOST_GENERIC_DETAIL_INTERCEPT15
+#define BOOST_GENERIC_DETAIL_INTERCEPT16
+#define BOOST_GENERIC_DETAIL_INTERCEPT17
+#define BOOST_GENERIC_DETAIL_INTERCEPT18
+#define BOOST_GENERIC_DETAIL_INTERCEPT19
+#define BOOST_GENERIC_DETAIL_INTERCEPT20
+#define BOOST_GENERIC_DETAIL_INTERCEPT21
+#define BOOST_GENERIC_DETAIL_INTERCEPT22
+#define BOOST_GENERIC_DETAIL_INTERCEPT23
+#define BOOST_GENERIC_DETAIL_INTERCEPT24
+#define BOOST_GENERIC_DETAIL_INTERCEPT25
+#define BOOST_GENERIC_DETAIL_INTERCEPT26
+#define BOOST_GENERIC_DETAIL_INTERCEPT27
+#define BOOST_GENERIC_DETAIL_INTERCEPT28
+#define BOOST_GENERIC_DETAIL_INTERCEPT29
+#define BOOST_GENERIC_DETAIL_INTERCEPT30
+#define BOOST_GENERIC_DETAIL_INTERCEPT31
+#define BOOST_GENERIC_DETAIL_INTERCEPT32
+#define BOOST_GENERIC_DETAIL_INTERCEPT33
+#define BOOST_GENERIC_DETAIL_INTERCEPT34
+#define BOOST_GENERIC_DETAIL_INTERCEPT35
+#define BOOST_GENERIC_DETAIL_INTERCEPT36
+#define BOOST_GENERIC_DETAIL_INTERCEPT37
+#define BOOST_GENERIC_DETAIL_INTERCEPT38
+#define BOOST_GENERIC_DETAIL_INTERCEPT39
+#define BOOST_GENERIC_DETAIL_INTERCEPT40
+#define BOOST_GENERIC_DETAIL_INTERCEPT41
+#define BOOST_GENERIC_DETAIL_INTERCEPT42
+#define BOOST_GENERIC_DETAIL_INTERCEPT43
+#define BOOST_GENERIC_DETAIL_INTERCEPT44
+#define BOOST_GENERIC_DETAIL_INTERCEPT45
+#define BOOST_GENERIC_DETAIL_INTERCEPT46
+#define BOOST_GENERIC_DETAIL_INTERCEPT47
+#define BOOST_GENERIC_DETAIL_INTERCEPT48
+#define BOOST_GENERIC_DETAIL_INTERCEPT49
+#define BOOST_GENERIC_DETAIL_INTERCEPT50
+#define BOOST_GENERIC_DETAIL_INTERCEPT51
+#define BOOST_GENERIC_DETAIL_INTERCEPT52
+#define BOOST_GENERIC_DETAIL_INTERCEPT53
+#define BOOST_GENERIC_DETAIL_INTERCEPT54
+#define BOOST_GENERIC_DETAIL_INTERCEPT55
+#define BOOST_GENERIC_DETAIL_INTERCEPT56
+#define BOOST_GENERIC_DETAIL_INTERCEPT57
+#define BOOST_GENERIC_DETAIL_INTERCEPT58
+#define BOOST_GENERIC_DETAIL_INTERCEPT59
+#define BOOST_GENERIC_DETAIL_INTERCEPT60
+#define BOOST_GENERIC_DETAIL_INTERCEPT61
+#define BOOST_GENERIC_DETAIL_INTERCEPT62
+#define BOOST_GENERIC_DETAIL_INTERCEPT63
+#define BOOST_GENERIC_DETAIL_INTERCEPT64
+#define BOOST_GENERIC_DETAIL_INTERCEPT65
+#define BOOST_GENERIC_DETAIL_INTERCEPT66
+#define BOOST_GENERIC_DETAIL_INTERCEPT67
+#define BOOST_GENERIC_DETAIL_INTERCEPT68
+#define BOOST_GENERIC_DETAIL_INTERCEPT69
+#define BOOST_GENERIC_DETAIL_INTERCEPT70
+#define BOOST_GENERIC_DETAIL_INTERCEPT71
+#define BOOST_GENERIC_DETAIL_INTERCEPT72
+#define BOOST_GENERIC_DETAIL_INTERCEPT73
+#define BOOST_GENERIC_DETAIL_INTERCEPT74
+#define BOOST_GENERIC_DETAIL_INTERCEPT75
+#define BOOST_GENERIC_DETAIL_INTERCEPT76
+#define BOOST_GENERIC_DETAIL_INTERCEPT77
+#define BOOST_GENERIC_DETAIL_INTERCEPT78
+#define BOOST_GENERIC_DETAIL_INTERCEPT79
+#define BOOST_GENERIC_DETAIL_INTERCEPT80
+#define BOOST_GENERIC_DETAIL_INTERCEPT81
+#define BOOST_GENERIC_DETAIL_INTERCEPT82
+#define BOOST_GENERIC_DETAIL_INTERCEPT83
+#define BOOST_GENERIC_DETAIL_INTERCEPT84
+#define BOOST_GENERIC_DETAIL_INTERCEPT85
+#define BOOST_GENERIC_DETAIL_INTERCEPT86
+#define BOOST_GENERIC_DETAIL_INTERCEPT87
+#define BOOST_GENERIC_DETAIL_INTERCEPT88
+#define BOOST_GENERIC_DETAIL_INTERCEPT89
+#define BOOST_GENERIC_DETAIL_INTERCEPT90
+#define BOOST_GENERIC_DETAIL_INTERCEPT91
+#define BOOST_GENERIC_DETAIL_INTERCEPT92
+#define BOOST_GENERIC_DETAIL_INTERCEPT93
+#define BOOST_GENERIC_DETAIL_INTERCEPT94
+#define BOOST_GENERIC_DETAIL_INTERCEPT95
+#define BOOST_GENERIC_DETAIL_INTERCEPT96
+#define BOOST_GENERIC_DETAIL_INTERCEPT97
+#define BOOST_GENERIC_DETAIL_INTERCEPT98
+#define BOOST_GENERIC_DETAIL_INTERCEPT99
+#define BOOST_GENERIC_DETAIL_INTERCEPT100
+#define BOOST_GENERIC_DETAIL_INTERCEPT101
+#define BOOST_GENERIC_DETAIL_INTERCEPT102
+#define BOOST_GENERIC_DETAIL_INTERCEPT103
+#define BOOST_GENERIC_DETAIL_INTERCEPT104
+#define BOOST_GENERIC_DETAIL_INTERCEPT105
+#define BOOST_GENERIC_DETAIL_INTERCEPT106
+#define BOOST_GENERIC_DETAIL_INTERCEPT107
+#define BOOST_GENERIC_DETAIL_INTERCEPT108
+#define BOOST_GENERIC_DETAIL_INTERCEPT109
+#define BOOST_GENERIC_DETAIL_INTERCEPT110
+#define BOOST_GENERIC_DETAIL_INTERCEPT111
+#define BOOST_GENERIC_DETAIL_INTERCEPT112
+#define BOOST_GENERIC_DETAIL_INTERCEPT113
+#define BOOST_GENERIC_DETAIL_INTERCEPT114
+#define BOOST_GENERIC_DETAIL_INTERCEPT115
+#define BOOST_GENERIC_DETAIL_INTERCEPT116
+#define BOOST_GENERIC_DETAIL_INTERCEPT117
+#define BOOST_GENERIC_DETAIL_INTERCEPT118
+#define BOOST_GENERIC_DETAIL_INTERCEPT119
+#define BOOST_GENERIC_DETAIL_INTERCEPT120
+#define BOOST_GENERIC_DETAIL_INTERCEPT121
+#define BOOST_GENERIC_DETAIL_INTERCEPT122
+#define BOOST_GENERIC_DETAIL_INTERCEPT123
+#define BOOST_GENERIC_DETAIL_INTERCEPT124
+#define BOOST_GENERIC_DETAIL_INTERCEPT125
+#define BOOST_GENERIC_DETAIL_INTERCEPT126
+#define BOOST_GENERIC_DETAIL_INTERCEPT127
+#define BOOST_GENERIC_DETAIL_INTERCEPT128
+#define BOOST_GENERIC_DETAIL_INTERCEPT129
+#define BOOST_GENERIC_DETAIL_INTERCEPT130
+#define BOOST_GENERIC_DETAIL_INTERCEPT131
+#define BOOST_GENERIC_DETAIL_INTERCEPT132
+#define BOOST_GENERIC_DETAIL_INTERCEPT133
+#define BOOST_GENERIC_DETAIL_INTERCEPT134
+#define BOOST_GENERIC_DETAIL_INTERCEPT135
+#define BOOST_GENERIC_DETAIL_INTERCEPT136
+#define BOOST_GENERIC_DETAIL_INTERCEPT137
+#define BOOST_GENERIC_DETAIL_INTERCEPT138
+#define BOOST_GENERIC_DETAIL_INTERCEPT139
+#define BOOST_GENERIC_DETAIL_INTERCEPT140
+#define BOOST_GENERIC_DETAIL_INTERCEPT141
+#define BOOST_GENERIC_DETAIL_INTERCEPT142
+#define BOOST_GENERIC_DETAIL_INTERCEPT143
+#define BOOST_GENERIC_DETAIL_INTERCEPT144
+#define BOOST_GENERIC_DETAIL_INTERCEPT145
+#define BOOST_GENERIC_DETAIL_INTERCEPT146
+#define BOOST_GENERIC_DETAIL_INTERCEPT147
+#define BOOST_GENERIC_DETAIL_INTERCEPT148
+#define BOOST_GENERIC_DETAIL_INTERCEPT149
+#define BOOST_GENERIC_DETAIL_INTERCEPT150
+#define BOOST_GENERIC_DETAIL_INTERCEPT151
+#define BOOST_GENERIC_DETAIL_INTERCEPT152
+#define BOOST_GENERIC_DETAIL_INTERCEPT153
+#define BOOST_GENERIC_DETAIL_INTERCEPT154
+#define BOOST_GENERIC_DETAIL_INTERCEPT155
+#define BOOST_GENERIC_DETAIL_INTERCEPT156
+#define BOOST_GENERIC_DETAIL_INTERCEPT157
+#define BOOST_GENERIC_DETAIL_INTERCEPT158
+#define BOOST_GENERIC_DETAIL_INTERCEPT159
+#define BOOST_GENERIC_DETAIL_INTERCEPT160
+#define BOOST_GENERIC_DETAIL_INTERCEPT161
+#define BOOST_GENERIC_DETAIL_INTERCEPT162
+#define BOOST_GENERIC_DETAIL_INTERCEPT163
+#define BOOST_GENERIC_DETAIL_INTERCEPT164
+#define BOOST_GENERIC_DETAIL_INTERCEPT165
+#define BOOST_GENERIC_DETAIL_INTERCEPT166
+#define BOOST_GENERIC_DETAIL_INTERCEPT167
+#define BOOST_GENERIC_DETAIL_INTERCEPT168
+#define BOOST_GENERIC_DETAIL_INTERCEPT169
+#define BOOST_GENERIC_DETAIL_INTERCEPT170
+#define BOOST_GENERIC_DETAIL_INTERCEPT171
+#define BOOST_GENERIC_DETAIL_INTERCEPT172
+#define BOOST_GENERIC_DETAIL_INTERCEPT173
+#define BOOST_GENERIC_DETAIL_INTERCEPT174
+#define BOOST_GENERIC_DETAIL_INTERCEPT175
+#define BOOST_GENERIC_DETAIL_INTERCEPT176
+#define BOOST_GENERIC_DETAIL_INTERCEPT177
+#define BOOST_GENERIC_DETAIL_INTERCEPT178
+#define BOOST_GENERIC_DETAIL_INTERCEPT179
+#define BOOST_GENERIC_DETAIL_INTERCEPT180
+#define BOOST_GENERIC_DETAIL_INTERCEPT181
+#define BOOST_GENERIC_DETAIL_INTERCEPT182
+#define BOOST_GENERIC_DETAIL_INTERCEPT183
+#define BOOST_GENERIC_DETAIL_INTERCEPT184
+#define BOOST_GENERIC_DETAIL_INTERCEPT185
+#define BOOST_GENERIC_DETAIL_INTERCEPT186
+#define BOOST_GENERIC_DETAIL_INTERCEPT187
+#define BOOST_GENERIC_DETAIL_INTERCEPT188
+#define BOOST_GENERIC_DETAIL_INTERCEPT189
+#define BOOST_GENERIC_DETAIL_INTERCEPT190
+#define BOOST_GENERIC_DETAIL_INTERCEPT191
+#define BOOST_GENERIC_DETAIL_INTERCEPT192
+#define BOOST_GENERIC_DETAIL_INTERCEPT193
+#define BOOST_GENERIC_DETAIL_INTERCEPT194
+#define BOOST_GENERIC_DETAIL_INTERCEPT195
+#define BOOST_GENERIC_DETAIL_INTERCEPT196
+#define BOOST_GENERIC_DETAIL_INTERCEPT197
+#define BOOST_GENERIC_DETAIL_INTERCEPT198
+#define BOOST_GENERIC_DETAIL_INTERCEPT199
+#define BOOST_GENERIC_DETAIL_INTERCEPT200
+#define BOOST_GENERIC_DETAIL_INTERCEPT201
+#define BOOST_GENERIC_DETAIL_INTERCEPT202
+#define BOOST_GENERIC_DETAIL_INTERCEPT203
+#define BOOST_GENERIC_DETAIL_INTERCEPT204
+#define BOOST_GENERIC_DETAIL_INTERCEPT205
+#define BOOST_GENERIC_DETAIL_INTERCEPT206
+#define BOOST_GENERIC_DETAIL_INTERCEPT207
+#define BOOST_GENERIC_DETAIL_INTERCEPT208
+#define BOOST_GENERIC_DETAIL_INTERCEPT209
+#define BOOST_GENERIC_DETAIL_INTERCEPT210
+#define BOOST_GENERIC_DETAIL_INTERCEPT211
+#define BOOST_GENERIC_DETAIL_INTERCEPT212
+#define BOOST_GENERIC_DETAIL_INTERCEPT213
+#define BOOST_GENERIC_DETAIL_INTERCEPT214
+#define BOOST_GENERIC_DETAIL_INTERCEPT215
+#define BOOST_GENERIC_DETAIL_INTERCEPT216
+#define BOOST_GENERIC_DETAIL_INTERCEPT217
+#define BOOST_GENERIC_DETAIL_INTERCEPT218
+#define BOOST_GENERIC_DETAIL_INTERCEPT219
+#define BOOST_GENERIC_DETAIL_INTERCEPT220
+#define BOOST_GENERIC_DETAIL_INTERCEPT221
+#define BOOST_GENERIC_DETAIL_INTERCEPT222
+#define BOOST_GENERIC_DETAIL_INTERCEPT223
+#define BOOST_GENERIC_DETAIL_INTERCEPT224
+#define BOOST_GENERIC_DETAIL_INTERCEPT225
+#define BOOST_GENERIC_DETAIL_INTERCEPT226
+#define BOOST_GENERIC_DETAIL_INTERCEPT227
+#define BOOST_GENERIC_DETAIL_INTERCEPT228
+#define BOOST_GENERIC_DETAIL_INTERCEPT229
+#define BOOST_GENERIC_DETAIL_INTERCEPT230
+#define BOOST_GENERIC_DETAIL_INTERCEPT231
+#define BOOST_GENERIC_DETAIL_INTERCEPT232
+#define BOOST_GENERIC_DETAIL_INTERCEPT233
+#define BOOST_GENERIC_DETAIL_INTERCEPT234
+#define BOOST_GENERIC_DETAIL_INTERCEPT235
+#define BOOST_GENERIC_DETAIL_INTERCEPT236
+#define BOOST_GENERIC_DETAIL_INTERCEPT237
+#define BOOST_GENERIC_DETAIL_INTERCEPT238
+#define BOOST_GENERIC_DETAIL_INTERCEPT239
+#define BOOST_GENERIC_DETAIL_INTERCEPT240
+#define BOOST_GENERIC_DETAIL_INTERCEPT241
+#define BOOST_GENERIC_DETAIL_INTERCEPT242
+#define BOOST_GENERIC_DETAIL_INTERCEPT243
+#define BOOST_GENERIC_DETAIL_INTERCEPT244
+#define BOOST_GENERIC_DETAIL_INTERCEPT245
+#define BOOST_GENERIC_DETAIL_INTERCEPT246
+#define BOOST_GENERIC_DETAIL_INTERCEPT247
+#define BOOST_GENERIC_DETAIL_INTERCEPT248
+#define BOOST_GENERIC_DETAIL_INTERCEPT249
+#define BOOST_GENERIC_DETAIL_INTERCEPT250
+#define BOOST_GENERIC_DETAIL_INTERCEPT251
+#define BOOST_GENERIC_DETAIL_INTERCEPT252
+#define BOOST_GENERIC_DETAIL_INTERCEPT253
+#define BOOST_GENERIC_DETAIL_INTERCEPT254
+#define BOOST_GENERIC_DETAIL_INTERCEPT255
+
+#endif // BOOST_GENERIC_DETAIL_INTERCEPT_HPP

Added: sandbox/generic/include/boost/generic/detail/interpreted_requirement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/interpreted_requirement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,227 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_HPP
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+// BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY takes:
+// ()
+// -or-
+// (default_)
+// if (), it yields nothing
+// else, it yields = default_
+#define BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( def_or_empty_in_paren ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( def_or_empty_in_paren ) \
+ , BOOST_PP_EMPTY \
+ , BOOST_GENERIC_DETAIL_EQ_DEFAULT \
+ ) def_or_empty_in_paren
+
+#define BOOST_GENERIC_DETAIL_EQ_DEFAULT( ... ) = __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTaxiom( i, d, arg ) \
+axiom BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTrequires( i, d, arg ) \
+requires BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTtypename( i, d, name \
+ , default_ \
+ ) \
+typename name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstrained_typename( i, d \
+ , constraint\
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( constraint ) \
+name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_typename( i, d \
+ , this_type \
+ , name \
+ , default_ \
+ ) \
+typename BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( constraint ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTfunction( i, d, return_type\
+ , name, param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS( param_dets, name ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS \
+( param_dets, name ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+static \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_function \
+( i, d, return_type, this_type, name, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR( \
+ i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTfunction \
+( i, d, return_type, operator operator_, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTprefix_unary_operator \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTbinary_operator \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR \
+( i, d, return_type, (), param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTcomma_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) operator , \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTarrow_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_BASIC_OPERATOR \
+( i, d, return_type, ->, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_MEMBER_OPERATOR( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_function \
+( i, d, return_type, this_type, operator operator_, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_MEMBER_OPERATOR \
+( i, d, return_type, this_type, =, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTallocation_operator \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTdeallocation_operator \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstructor \
+( i, d, this_type, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTdestructor( i, d, this_type\
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::~BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type )() \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ ) \
+operator BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( target_type )( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) )\
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTexplicit_conversion( \
+ i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconversion \
+( i, d, target_type, param_dets, default_ )
+
+#endif // BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENT_HPP

Added: sandbox/generic/include/boost/generic/detail/is_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_concept.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_CONCEPT_HPP
+#define BOOST_GENERIC_DETAIL_IS_CONCEPT_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class T > struct is_concept : mpl::false_ {};
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_IS_CONCEPT_HPP

Added: sandbox/generic/include/boost/generic/detail/is_conditional_arg.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_conditional_arg.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_HPP
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_HPP
+
+#include <boost/generic/detail/param_id_category.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// A macro that assigns a unique value to each different parameter kind
+// This macro takes the entire argument including the name
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG( arg_in_paren ) \
+BOOST_PP_CAT \
+( BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_ \
+, BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( arg_in_paren ) \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_for 0
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_for_typedef 0
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_if 1
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_if_not 1
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_if_typedef 1
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_try 1
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_typename 1
+#define BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_public 1
+
+#endif // BOOST_GENERIC_DETAIL_IS_CONDITIONAL_ARG_HPP

Added: sandbox/generic/include/boost/generic/detail/is_empty.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_empty.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_IS_EMPTY_HPP
+#define BOOST_GENERIC_DETAIL_IS_EMPTY_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+
+#include <boost/variadic_macro_data/vmd_is_empty.hpp>
+
+// Checks if the first argument is empty
+#define BOOST_GENERIC_DETAIL_STARTS_EMPTY( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY \
+( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) )
+
+// Checks if the argument is not empty
+#define BOOST_GENERIC_DETAIL_IS_NOT_EMPTY( ... ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_IS_EMPTY BOOST_VMD_IS_EMPTY
+
+#define BOOST_GENERIC_DETAIL_IS_EMPTY_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY_AFTER_RESCAN_( (__VA_ARGS__) )
+
+#define BOOST_GENERIC_DETAIL_IS_EMPTY_AFTER_RESCAN_( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY __VA_ARGS__
+
+#endif // BOOST_GENERIC_DETAIL_IS_EMPTY_HPP

Added: sandbox/generic/include/boost/generic/detail/is_error.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_error.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_ERROR_HPP
+#define BOOST_GENERIC_DETAIL_IS_ERROR_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+
+// Begin "starts with error" macros
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_ERROR \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_ERRORerror ,
+
+#endif // BOOST_GENERIC_DETAIL_IS_ERROR_HPP

Added: sandbox/generic/include/boost/generic/detail/is_not_same.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_not_same.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_NOT_SAME_HPP
+#define BOOST_GENERIC_DETAIL_IS_NOT_SAME_HPP
+
+namespace boost { namespace generic { namespace detail {
+
+template< class L, class R >
+struct is_not_same { static bool const value = true; };
+
+template< class T >
+struct is_not_same< T, T > { static bool const value = false; };
+
+} } }
+
+#endif // BOOST_GENERIC_DETAIL_IS_NOT_SAME_HPP

Added: sandbox/generic/include/boost/generic/detail/is_operator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_operator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,350 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_OPERATOR_HPP
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/tail_is_empty.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+// Begin "is operator name" checks
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL_ \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_IS_OPERATOR \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+// Begin "is nonmember operator name" checks
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL_ \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+// Begin "is member operator name" checks
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL_ \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+// Helper macro
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME_IMPL_( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY_AFTER_RESCAN \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+)( __VA_ARGS__ )
+
+// Yields 1 for comma, call, and arrow, else 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OP( op_name ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_IS_NONBASIC_OP, op_name )
+
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPplus 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPminus 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPmultiply 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPdivide 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPmodulus 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPunary_plus 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPnegate 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPless 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPgreater 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPless_equal 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPgreater_equal 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPequal_to 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPnot_equal_to 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPlogical_and 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPlogical_or 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPlogical_not 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_and 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_or 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_xor 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPcomplement 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPleft_shift 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPright_shift 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPdereference 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPaddress_of 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPsubscript 1
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPcall 1
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPassign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPplus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPminus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPmultiply_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPdivide_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPmodulus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_and_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_or_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPbit_xor_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPleft_shift_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPright_shift_assign 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPpreincrement 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPpostincrement 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPpredecrement 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPpostdecrement 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPcomma 1
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPnew 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPnew_array 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPdelete 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OPdelete_array 0
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OParrow 1
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_OParrow_dereference 0
+
+#define BOOST_GENERIC_DETAIL_IS_ASSIGN( op_name ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_IS_ASSIGN, op_name )
+
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNplus 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNminus 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNmultiply 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNdivide 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNmodulus 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNunary_plus 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNnegate 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNless 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNgreater 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNless_equal 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNgreater_equal 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNequal_to 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNnot_equal_to 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNlogical_and 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNlogical_or 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNlogical_not 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_and 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_or 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_xor 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNcomplement 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNleft_shift 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNright_shift 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNdereference 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNaddress_of 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNsubscript 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNcall 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNassign 1
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNplus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNminus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNmultiply_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNdivide_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNmodulus_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_and_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_or_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNbit_xor_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNleft_shift_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNright_shift_assign 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNpreincrement 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNpostincrement 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNpredecrement 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNpostdecrement 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNcomma 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNnew 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNnew_array 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNdelete 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNdelete_array 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNarrow 0
+#define BOOST_GENERIC_DETAIL_IS_ASSIGNarrow_dereference 0
+
+#define BOOST_GENERIC_DETAIL_IS_OPERATORplus ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORminus ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORmultiply ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORdivide ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORmodulus ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORunary_plus ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORnegate ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORless ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORgreater ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORless_equal ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORgreater_equal ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORequal_to ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORnot_equal_to ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORlogical_and ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORlogical_or ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORlogical_not ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_and ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_or ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_xor ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORcomplement ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORleft_shift ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORright_shift ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORdereference ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORaddress_of ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORsubscript ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORcall ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORassign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORplus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORminus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORmultiply_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORdivide_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORmodulus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_and_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_or_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORbit_xor_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORleft_shift_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORright_shift_assign ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORpreincrement ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORpostincrement ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORpredecrement ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORpostdecrement ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORcomma ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORnew ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORnew_array ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORdelete ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORdelete_array ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORarrow ,
+#define BOOST_GENERIC_DETAIL_IS_OPERATORarrow_dereference ,
+
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORplus ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORminus ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORmultiply ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORdivide ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORmodulus ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORunary_plus ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORnegate ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORless ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORgreater ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORless_equal ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORgreater_equal ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORequal_to ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORnot_equal_to ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORlogical_and ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORlogical_or ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORlogical_not ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_and ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_or ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_xor ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORcomplement ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORleft_shift ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORright_shift ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORdereference ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORaddress_of ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORsubscript ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORcall ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORplus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORminus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORmultiply_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORdivide_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORmodulus_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_and_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_or_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORbit_xor_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORleft_shift_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORright_shift_assign ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORpreincrement ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORpostincrement ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORpredecrement ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORpostdecrement ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORcomma ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORarrow ,
+#define BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATORarrow_dereference ,
+
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATORassign ,
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATORnew ,
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATORnew_array ,
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATORdelete ,
+#define BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATORdelete_array ,
+
+#define BOOST_GENERIC_DETAIL_OPERATOR_KIND( op_name ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_OP_KIND, op_name )
+
+#define BOOST_GENERIC_DETAIL_OP_KINDplus binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDminus binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDmultiply binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDdivide binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDmodulus binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDunary_plus prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDnegate prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDless binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDgreater binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDless_equal binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDgreater_equal binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDequal_to binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDnot_equal_to binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDlogical_and binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDlogical_or binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDlogical_not prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_and binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_or binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_xor binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDcomplement prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDleft_shift binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDright_shift binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDdereference prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDaddress_of prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDsubscript subscript_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDcall call_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDassign assign_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDplus_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDminus_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDmultiply_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDdivide_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDmodulus_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_and_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_or_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDbit_xor_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDleft_shift_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDright_shift_assign binary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDpreincrement prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDpostincrement postfix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDpredecrement prefix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDpostdecrement postfix_unary_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDcomma comma_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDnew allocation_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDnew_array allocation_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDdelete deallocation_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDdelete_array deallocation_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDarrow arrow_operator
+#define BOOST_GENERIC_DETAIL_OP_KINDarrow_dereference binary_operator
+
+// Begin "starts with operator" macros
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATORoperator ,
+
+// Begin "eat operator" macros
+#define BOOST_GENERIC_DETAIL_EAT_OPERATOR( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_OPERATOR, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_OPERATORoperator
+
+#endif // BOOST_GENERIC_DETAIL_IS_OPERATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/is_parenthesized.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_parenthesized.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED_HPP
+#define BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED_HPP
+
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_IS_PARENTHESIZED_IMPL_STARTS_PAREN \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_PARENTHESIZED_IMPL_STARTS_PAREN( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY( BOOST_GENERIC_DETAIL_EAT_WRAPPED( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED_IMPL \
+ BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED_IMPL( ... ) _1, _2
+
+#endif // BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED_HPP

Added: sandbox/generic/include/boost/generic/detail/is_recognized_arg.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_recognized_arg.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,63 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG_HPP
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG_HPP
+
+#include <boost/generic/detail/128_args.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+
+// This macro "works" in a very hackish way. It concatenates a base macro name
+// with the argument. If it's a recognized name, this will produce an invocation
+// that yields text with at least 127 top-level commas (top-level meaning not
+// surrounded by parentheses). How many top-level args are then checked and if
+// the number is greater than 127, we assume that the param id was correctly
+// identified. Note that this can fail if the produced comma-separated list has
+// more commas than can be handled by the macro which checks how many arguments
+// are passed. In practice this will likely never come up, but if it does, the
+// number of arguments supported by the size-checking macro can be easily
+// increased. One possible place this may cause a problem is if someone has an
+// initializer list in a "do" with over 128 elements.
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( arg_in_paren ) \
+BOOST_PP_GREATER \
+( BOOST_GENERIC_DETAIL_NUM_ARGS \
+ ( BOOST_PP_CAT \
+ ( BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ \
+ , BOOST_GENERIC_DETAIL_PARAM_ID( arg_in_paren ) \
+ ) \
+ ) \
+, 127 \
+)
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_for \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_for_typedef \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_if \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_if_not \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_if_typedef \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_try \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_typename \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#define BOOST_GENERIC_DETAIL_IS_RECOGNIZED_public \
+BOOST_GENERIC_DETAIL_128_ARGS()
+
+#endif // BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG_HPP

Added: sandbox/generic/include/boost/generic/detail/is_seq_nil.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_seq_nil.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_IS_SEQ_NIL_HPP
+#define BOOST_GENERIC_DETAIL_IS_SEQ_NIL_HPP
+
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+
+#define BOOST_GENERIC_DETAIL_IS_SEQ_NIL( arg ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( arg ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ , BOOST_GENERIC_DETAIL_IS_SEQ_NIL_IMPL \
+ )( arg )
+
+#define BOOST_GENERIC_DETAIL_IS_SEQ_NIL_IMPL( arg ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_PP_CAT( BOOST_GENERIC_DETAIL_IS_SEQ_NIL_IMPL, arg foo ) ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_SEQ_NIL_IMPLBOOST_PP_SEQ_NIL ,
+
+#endif // BOOST_GENERIC_DETAIL_IS_SEQ_NIL_HPP

Added: sandbox/generic/include/boost/generic/detail/is_this.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_this.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_THIS_HPP
+#define BOOST_GENERIC_DETAIL_IS_THIS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+// Begin "starts with this" macros
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THISthis ,
+
+// Begin "eat this" macros
+#define BOOST_GENERIC_DETAIL_EAT_THIS( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_THIS, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_THISthis
+
+#endif // BOOST_GENERIC_DETAIL_IS_THIS_HPP

Added: sandbox/generic/include/boost/generic/detail/is_valid_name_and_params.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_valid_name_and_params.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,80 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_HPP
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_HPP
+
+#include <boost/generic/detail/error.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+
+// If this is the case, we can't do any more checking at this point, so don't
+// yield an error
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_NOT_COMMA( arg ) 1
+
+// If we have more than one comma then this can't possibly be a valid function
+// header (since conversion operators can't be supported by BOOST_GENERIC)
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_TOO_MANY_ARGS( ... ) 0
+
+// Check if the first parameter is "operator"
+// ToDo: If you are experiencing problems when operator is passed, this may need
+// to be changed to force an expansion before passing the args to "NUM_ARGS"
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR( name ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS \
+ ( BOOST_GENERIC_DETAIL_IS_OPERATOR_ ## name ) \
+, 2 \
+)
+
+// Yields 2 tokens separate by a comma
+#define BOOST_GENERIC_DETAIL_IS_OPERATOR_operator _0, _1
+
+// If it's 2 arguments, we need to check that the first argument is "operator"
+// and the that second parameter starts with something that's parenthesized
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_COMMA(name,params) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_IS_OPERATOR( name ) \
+, BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( params ) \
+)
+
+// Note: argument must have the first set of parenthesis stripped
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS(name_params_paren) \
+BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_IMPL name_params_paren
+
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 1 ) \
+, BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_NOT_COMMA \
+, BOOST_PP_IIF \
+ ( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 2 ) \
+ , BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_COMMA \
+ , BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_TOO_MANY_ARGS \
+ ) \
+)( __VA_ARGS__ )
+
+// Yields a 2 element sequence of a bit specified as 1 if there's a fatal error
+// with the second element of the sequence being an array of errors.
+#define BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_INFO( arg ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( arg ) \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS( arg ) \
+ , (0)((0,())) \
+ , (0)((1,( BOOST_GENERIC_DETAIL_ERROR_INVALID_NAME_AND_PARAMS() ))) \
+ ) \
+, (1) \
+ (( 1 \
+ ,( BOOST_GENERIC_DETAIL_ERROR_NOT_PARENTHESIZED( 1, arg ) ) \
+ ) \
+ ) \
+)
+
+#endif // BOOST_GENERIC_DETAIL_IS_VALID_NAME_AND_PARAMS_HPP

Added: sandbox/generic/include/boost/generic/detail/is_valid_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/is_valid_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,171 @@
+#ifndef BOOST_GENERIC_DETAIL_IS_VALID_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_IS_VALID_VISITOR_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#define BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d ) \
+BOOST_PP_CAT( boost_generic_detail_function_is_valid, i ) \
+< BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) ) \
+ BOOST_PP_COMMA_IIF \
+ ( BOOST_PP_COMPL( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY \
+ ( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+ ) \
+ ) \
+ BOOST_PP_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) ) \
+>,
+
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDaxiom( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDrequires( i, d, arg ) \
+::boost::generic::detail::concept_is_valid \
+< BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) >,
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDtypename( i, d, name, default_ ) \
+::boost::generic::detail::is_not_dummy_type< name >,
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDconstrained_typename( i, d, constraint \
+ , name, default_ \
+ ) \
+::boost::generic::detail::is_not_dummy_type< name >, \
+::boost::generic::detail::concept_is_valid< constraint< name > >,
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_IS_VALIDmember_typename( i, d, this_type, name \
+ , default_ \
+ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_IS_VALIDconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDfunction( i, d, return_type, name \
+ , param_dets, default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDmember_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALID_BASIC_OPERATOR( \
+ i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDprefix_unary_operator \
+BOOST_GENERIC_DETAIL_IS_VALID_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_IS_VALID_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDbinary_operator \
+BOOST_GENERIC_DETAIL_IS_VALID_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+#define BOOST_GENERIC_DETAIL_IS_VALIDcomma_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDarrow_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALID_MEMBER_OPERATOR( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDallocation_operator \
+BOOST_GENERIC_DETAIL_IS_VALID_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDdeallocation_operator \
+BOOST_GENERIC_DETAIL_IS_VALID_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDdestructor( i, d, this_type, default_ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDconversion( i, d, target_type, param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#define BOOST_GENERIC_DETAIL_IS_VALIDexplicit_conversion( \
+ i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_FUNCTION_IS_VALID_PARAM( i, d )
+
+#endif // BOOST_GENERIC_DETAIL_IS_VALID_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/map_index.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/map_index.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_MAP_INDEX_HPP
+#define BOOST_GENERIC_DETAIL_MAP_INDEX_HPP
+
+#include <boost/generic/limits.hpp>
+
+namespace boost_generic_detail { namespace {
+
+// ToDo: Use something other than static_assert when it's not available
+
+template< unsigned MapIndex = BOOST_GENERIC_CONCEPT_MAX_CONCEPT_MAPS >
+struct map_index : map_index< MapIndex - 1 >
+{
+ static_assert( MapIndex != BOOST_GENERIC_CONCEPT_MAX_CONCEPT_MAPS + 1
+ , "Too many concept maps for type"
+ );
+ static unsigned const value_c = MapIndex;
+ static unsigned value() { return value_c; }
+};
+
+template<>
+struct map_index< 0 >
+{
+ static unsigned const value_c = 0;
+ static unsigned value() { return value_c; }
+};
+
+} }
+
+#endif // BOOST_GENERIC_DETAIL_MAP_INDEX_HPP

Added: sandbox/generic/include/boost/generic/detail/map_name_params_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/map_name_params_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,84 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETAILS_HPP
+
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/comparison/not_equal.hpp>
+#include <boost/preprocessor/logical/not.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+
+// Input is a concept name and parameters of the form:
+// ( concept_name )( parameters, ... )
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS( data ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( data ) \
+, BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_PAREN \
+, BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_NOT_PAREN \
+)( data )
+
+// This is called internally once it's determined that the argument starts
+// parenthesized. Here, we check to make sure that "data" is in the form of a 2
+// element variadic sequence. If it is not, we abort.
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_PAREN( data ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_SIZE( data ), 2 ) \
+, BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_VALID_SIZE \
+, BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_INVALID_SIZE \
+)( data )
+
+// This is called internally once it's determined that "data" is a 2 element
+// variadic sequence. At this point we do no further error checking and assume
+// that the data is in the proper format.
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_VALID_SIZE( data ) \
+BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_VALID_SIZE_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( data ) )
+
+// Yields formatted concept name and param details -- no errors found
+// The 0 in the first seq elem here means that we found no errors.
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_VALID_SIZE_IMPL( data ) \
+( 0 ) \
+( BOOST_PP_SEQ_HEAD( data ) ) \
+( BOOST_PP_SEQ_ELEM( 1, data ) )
+
+// Yields error information when data is not a 2 element sequence
+// The 1 in the first seq elem here means that data wasn't even a sequence
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_NOT_PAREN( data ) \
+( 1 ) \
+( ~ ) \
+( ~ )
+
+// Yields error information when data is not a 2 element sequence
+// The 2 in the first seq elem here means that the sequence was not size 2
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IMPL_INVALID_SIZE( data ) \
+( 2 ) \
+( ~ ) \
+( ~ )
+
+// Yields 1 is the name and params were in a valid format
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_VALID( dets ) \
+BOOST_PP_NOT( BOOST_PP_SEQ_ELEM( 0, dets ) )
+
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_PARENTHESIZED( dets ) \
+BOOST_PP_NOT_EQUAL( BOOST_PP_SEQ_ELEM( 0, dets ), 1 )
+
+// Yields the concept name
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_CONCEPT_NAME( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+// Yields the params
+#define BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_CONCEPT_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#endif // BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/mem_operator_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/mem_operator_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,6 @@
+#ifndef BOOST_GENERIC_DETAIL_MEM_OPERATOR_DETS_HPP
+#define BOOST_GENERIC_DETAIL_MEM_OPERATOR_DETS_HPP
+
+
+
+#endif // BOOST_GENERIC_DETAIL_MEM_OPERATOR_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/multi_decl_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/multi_decl_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_MULTI_DECL_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_MULTI_DECL_DETAILS_HPP
+
+
+
+#endif // BOOST_GENERIC_DETAIL_MULTI_DECL_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/mutable_state.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/mutable_state.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,101 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_DETAIL_MUTABLE_STATE_HPP
+#define BOOST_GENERIC_DETAIL_MUTABLE_STATE_HPP
+
+#include <boost/mpl/apply.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+// The maximum number of times a mutable state can be modified
+// Note: GCC 4.7 fails after 512 and Clang 3.1 fails only slightly beyond 512
+constexpr unsigned max_mutations = 512;
+
+// Mutation count is what associates a given mutation with the current number of
+// mutations that have occurred. Inheritance is used so that when passing an
+// instance of mutation count to a function, the most recent mutation is the
+// best match.
+template< unsigned Val = max_mutations >
+struct mutation_count : mutation_count< Val - 1 > {};
+
+template<> struct mutation_count< 0 > {};
+
+template< class Operation, class PreviousStateHolder >
+struct modify_mutable_state_holder
+{
+ static unsigned const value = PreviousStateHolder::value + 1;
+ static mutation_count< value + 1 > next_index();
+ typedef typename boost::mpl::apply
+ < Operation, typename PreviousStateHolder::state >::type state;
+};
+
+template< class NewState, class PreviousStateHolder >
+struct set_mutable_state_holder
+{
+ static unsigned const value = PreviousStateHolder::value + 1;
+ static mutation_count< value + 1 > next_index();
+ typedef NewState state;
+};
+
+template< class InitialState >
+struct initial_mutable_state_holder
+{
+ static unsigned const value = 0;
+ static mutation_count< 1 > next_index();
+ typedef InitialState state;
+};
+
+} } }
+
+#define BOOST_GENERIC_DETAIL_INITIALIZE_STATE( tag, ... ) \
+::boost::generic::detail::initial_mutable_state_holder< __VA_ARGS__ > \
+boost_generic_detail_get_mutable_state_holder \
+( tag, ::boost::generic::detail::mutation_count< 0 > const& );
+
+#define BOOST_GENERIC_DETAIL_MODIFY_STATE( tag, mutator ) \
+::boost::generic::detail::modify_mutable_state_holder \
+< mutator \
+, decltype \
+ ( boost_generic_detail_get_mutable_state_holder \
+ ( tag(), ::boost::generic::detail::mutation_count<>() ) \
+ ) \
+> \
+boost_generic_detail_get_mutable_state_holder \
+( tag \
+, decltype \
+ ( boost_generic_detail_get_mutable_state_holder \
+ ( tag(), ::boost::generic::detail::mutation_count<>() ).next_index() \
+ ) const& \
+);
+
+#define BOOST_GENERIC_DETAIL_SET_STATE( tag, ... ) \
+::boost::generic::detail::set_mutable_state_holder \
+< __VA_ARGS__ \
+, decltype \
+ ( boost_generic_detail_get_mutable_state_holder \
+ ( tag(), ::boost::generic::detail::mutation_count<>() ) \
+ ) \
+> \
+boost_generic_detail_get_mutable_state_holder \
+( tag \
+, decltype \
+ ( boost_generic_detail_get_mutable_state_holder \
+ ( tag(), ::boost::generic::detail::mutation_count<>() ).next_index() \
+ ) const& \
+);
+
+// TODO allow for namespace qualification
+#define BOOST_GENERIC_DETAIL_GET_STATE( ... ) \
+decltype \
+( boost_generic_detail_get_mutable_state_holder \
+ ( __VA_ARGS__(), ::boost::generic::detail::mutation_count<>() ) \
+) \
+::state
+
+#endif // BOOST_GENERIC_DETAIL_MUTABLE_STATE_HPP

Added: sandbox/generic/include/boost/generic/detail/namespace.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/namespace.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,186 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NAMESPACE_HPP
+#define BOOST_GENERIC_DETAIL_NAMESPACE_HPP
+
+// This file supplies macros for getting information about a macro namespace
+// declaration of the form:
+// ( namespace nested, namespaces, as, list )
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS( arg ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( arg ) \
+ , BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_PARENTHESIZED \
+ , BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NOT_PARENTHESIZED \
+ )( BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) )
+
+// Note: These macros result in text of the form:
+// (valid_bit)(parenthesized_bit)(namespace_bit)(namespace_sequence)
+// where "valid_bit" is 1 if it is a fully valid namespace decl, otherwise 0
+// where "parenthesized_bit" is 1 if it starts parenthesized, otherwise 0
+// where "namespace_bit" is 1 if it is a namespace param, otherwise 0
+// where "namespace_sequence" is a variadic preprocessor sequence of namespaces
+// The following are accessors for that information
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_NAMESPACE_SEQ( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_ \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_( dets ) \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_MAC, ~ \
+, BOOST_GENERIC_DETAIL_SEQ_TO_SEQ \
+ ( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_NAMESPACE_SEQ( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_MAC( r, data, elem )\
+namespace \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( elem ) ) \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_ANON_NAMESPACE_IMPL \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_IMPL \
+)( elem ) \
+{
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_ANON_NAMESPACE_IMPL( elem )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE_IMPL( elem ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( elem )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE_( dets ) \
+BOOST_PP_REPEAT \
+( BOOST_GENERIC_DETAIL_SEQ_SIZE \
+ ( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_NAMESPACE_SEQ( dets ) ) \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE_MAC, ~ \
+)
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE_MAC( z, n, text ) }
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_( dets ) \
+BOOST_PP_SEQ_FOR_EACH \
+( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_MAC, ~ \
+, BOOST_GENERIC_DETAIL_SEQ_TO_SEQ \
+ ( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_NAMESPACE_SEQ( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_MAC(r,data, elem )\
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( elem ) ) \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_ANON_NAMESPACE_IMPL \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_IMPL \
+)( elem )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_ANON_NAMESPACE_IMPL( elem )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE_IMPL( elem ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( elem )::
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NOT_PARENTHESIZED( arg ) \
+( 0 )( 0 )( 0 )( (boost_generic_invalid_namespace_declaration) )
+
+// At this point we know that we have something of the form
+// ( something_here )
+// ToDo: Possible add check to make sure the next part is not parenthesized
+// before checking if it's "namespace"
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_PARENTHESIZED( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_NAMESPACE \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NOT_NAMESPACE \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NOT_NAMESPACE( ... ) \
+( 0 )( 1 )( 0 )( (boost_generic_invalid_namespace_declaration) )
+
+// At this point we know that the argument is of the form
+// ( namespace something_here )
+// A namespace declaration should not have commas so here we check that
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE( ... ) \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_EATEN \
+( BOOST_GENERIC_DETAIL_EAT_NAMESPACE( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_IS_NAMESPACE( arg ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_PP_CAT( BOOST_GENERIC_DETAIL_IS_NAMESPACE_, arg ) ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_NAMESPACE_namespace _1, _2
+
+#define BOOST_GENERIC_DETAIL_EAT_NAMESPACE( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_NAMESPACE_IMPL_, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_NAMESPACE_IMPL_namespace
+
+// At this point we have something of the form
+// ( namespace something_here )
+// We've "eaten" everything up to "something_here"
+// Here we check if "something_here" starts parenthesized
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_EATEN( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE_EMPTY \
+, BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE_NOT_EMPTY \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE_EMPTY( ... ) \
+( 1 )( 1 )( 1 )( () )
+
+#define BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IMPL_NAMESPACE_NOT_EMPTY( ... ) \
+( 1 )( 1 )( 1 )( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) )
+
+#endif // BOOST_GENERIC_DETAIL_NAMESPACE_HPP

Added: sandbox/generic/include/boost/generic/detail/nary_cat.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/nary_cat.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,66 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NARY_CAT_HPP
+#define BOOST_GENERIC_DETAIL_NARY_CAT_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT( ... ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_NARY_CAT_ \
+ , BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ) \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_1( arg ) arg
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_2( l, r ) BOOST_PP_CAT( l, r )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_3( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_2( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_4( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_3( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_5( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_4( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_6( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_5( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_7( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_6( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_8( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_7( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_9( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_8( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_10( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_9( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_11( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_10( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_12( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_11( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_13( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_12( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_14( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_13( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_15( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_14( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NARY_CAT_16( head, ... ) \
+BOOST_PP_CAT( head, BOOST_GENERIC_DETAIL_NARY_CAT_15( __VA_ARGS__ ) )
+
+#endif // BOOST_GENERIC_DETAIL_NARY_CAT_HPP

Added: sandbox/generic/include/boost/generic/detail/native_requirement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/native_requirement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,222 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENT_HPP
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENT_HPP
+
+#include <boost/generic/detail/interpreted_requirement.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+
+// BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY takes:
+// ()
+// -or-
+// (default_)
+// if (), it yields ;
+// else, it yields nothing
+#define BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( def_or_empty_in_paren ) \
+BOOST_PP_EXPR_IIF \
+( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( def_or_empty_in_paren ), ; )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTaxiom \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTaxiom
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTrequires( i, d, arg ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTrequires( i, d, arg );
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTtypename( i, d, name, default_ )\
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTtypename( i, d, name, default_ );
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTconstrained_typename( i, d \
+ , constraint\
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstrained_typename \
+( i, d, constraint, name, default_ );
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTmember_typename( i, d, this_type\
+ , name, default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_typename \
+( i, d, this_type, name, default_ );
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTconstrained_member_typename( \
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstrained_member_typename \
+( i, d, constraint, this_type, name, default_ );
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTfunction( i, d, return_type \
+ , name, param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTfunction \
+( i, d, return_type, name, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTmember_function( i, d \
+ , return_type \
+ , this_type, name\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTmember_function \
+( i, d, return_type, this_type, name, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTstatic_member_function \
+( i, d, return_type, this_type, name, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTprefix_unary_operator( \
+ i, d \
+ , return_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTprefix_unary_operator \
+( i, d, return_type, operator_, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTpostfix_unary_operator( \
+ i, d \
+ , return_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTpostfix_unary_operator \
+( i, d, return_type, operator_, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTbinary_operator( i, d \
+ , return_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTbinary_operator \
+( i, d, return_type, operator_, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTcall_operator \
+( i, d, return_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTcomma_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTcomma_operator \
+( i, d, return_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTarrow_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTarrow_operator \
+( i, d, return_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTassign_operator( i, d \
+ , return_type \
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTassign_operator \
+( i, d, return_type, this_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTallocation_operator( i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTallocation_operator \
+( i, d, return_type, this_type, operator_, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTdeallocation_operator( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTdeallocation_operator \
+( i, d, return_type, this_type, operator_, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTconstructor( i, d, this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconstructor \
+( i, d, this_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTexplicit_constructor( i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTexplicit_constructor \
+( i, d, this_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTdestructor( i, d, this_type \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTdestructor \
+( i, d, this_type, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTconversion( i, d, target_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTconversion \
+( i, d, target_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENTexplicit_conversion( i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_INTERPRETED_REQUIREMENTexplicit_conversion \
+( i, d, target_type, param_dets, default_ ) \
+BOOST_GENERIC_DETAIL_SEMICOLON_IF_EMPTY( default_ )
+
+#endif // BOOST_GENERIC_DETAIL_NATIVE_REQUIREMENT_HPP

Added: sandbox/generic/include/boost/generic/detail/nested_name_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/nested_name_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,48 @@
+#ifndef BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_HPP
+#define BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_HPP
+
+#define BOOST_GENERIC_DETAIL_NESTED_NAME_DETS( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 1 ) \
+, BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_IMPL \
+, BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_IMPL_INVALID \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_IMPL( arg ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS( arg ) \
+ , BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_IMPL_HAS_THIS \
+ , BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_IMPL_INVALID \
+ )( arg )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS( ... ) \
+BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL \
+( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL( arg ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( arg ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ , BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL_NO_PAREN \
+ )( arg )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL_NO_PAREN( arg ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL, arg foo ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPLthis ,
+
+#define BOOST_GENERIC_DETAIL_EAT_THIS( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT( BOOST_GENERIC_DETAIL_EAT_THIS, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_THIS
+
+(typename (Container<int>) iterator
+
+(void)((Container<int>)begin)( (int) foo )
+
+#endif // BOOST_GENERIC_DETAIL_NESTED_NAME_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/no_return_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/no_return_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,330 @@
+#ifndef BOOST_GENERIC_DETAIL_NO_RETURN_DETS_HPP
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/num_args_is_1.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/operator_dets.hpp>
+#include <boost/generic/detail/this_mem_dets.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// No returns are either constructors, destructors, or conversion operators
+// They are of the form:
+// optional_explicit (this(T))( params ) post_param_stuff
+// -or-
+// (this(T) destroy)( params ) post_param_stuff
+// -or-
+// optional_explicit (operator something)( params ) post_param_stuff
+// Yields a result of the form:
+// (validity_bit)(partial_bit)(is_explicit_bit)
+// (is_constructor_bit)(is_destructor_bit)(is_conversion_bit)
+// (param_dets)(this_type_or_target_type)((def_or_empty))
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS( ... ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT( __VA_ARGS__ ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_NO_RETURN_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS wrapped_arg
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL( is_explicit, ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NO_DEF \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NOT_1_PARAM \
+)( is_explicit \
+ , BOOST_PP_IIF( is_explicit \
+ , BOOST_GENERIC_DETAIL_EAT_EXPLICIT \
+ , BOOST_GENERIC_DETAIL_SELF \
+ )( __VA_ARGS__ ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( dets ) \
+BOOST_PP_SEQ_ELEM( 4, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( dets ) \
+BOOST_PP_SEQ_ELEM( 5, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_PARAM_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 6, dets )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 7, dets ) )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_TARGET_TYPE \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_THIS_TYPE
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 8, dets ) )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_HAS_DEFINITION( dets ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY \
+( BOOST_GENERIC_DETAIL_NO_RETURN_DETS_DEFINITION( dets ) )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NO_DEF( is_explicit, arg ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_DEF \
+( is_explicit, BOOST_GENERIC_DETAIL_SEQ_DETS( arg ), )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NOT_1_PARAM(is_explicit,...) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_EMPTY( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_INVALID \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_2_PARAMS \
+ )( is_explicit, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_INVALID( ... ) \
+(0)(0)(0)(0)(0)(0)(~)(~)(())
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL( ... ) \
+(0)(1)(0)(0)(0)(0)(~)(~)(())
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_2_PARAMS( is_exp, seq \
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_INVALID \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_DEF \
+)( is_exp, BOOST_GENERIC_DETAIL_SEQ_DETS( seq ), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_DEF(is_exp,seq_dets,...) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_SEQ_DETS_SIZE( seq_dets ), 2 ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_DEF_IMPL \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_INVALID \
+)( is_exp \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_SEQ( seq_dets ) \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_EXTRA_DATA( seq_dets ) \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_WITH_DEF_IMPL( is_exp, seq, ex\
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CHECK_PARAMS \
+( is_exp, seq \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AFTER_RESCAN \
+ ( BOOST_PP_SEQ_ELEM( 1, seq ) ex ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CHECK_PARAMS( is_exp, seq \
+ , param_dets, ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( param_dets ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_STRUCTURE \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL \
+ )( is_exp \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) )\
+ , param_dets \
+ , __VA_ARGS__ \
+ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_STRUCTURE( is_exp, name \
+ , param_dets \
+ , ... \
+ ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_STRUCTURE_ \
+( is_exp, name, param_dets, BOOST_GENERIC_DETAIL_THIS_MEM_DETS( name ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_STRUCTURE_( is_exp, name\
+ , param_dets \
+ , this_mem_dets\
+ , ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( this_mem_dets ) \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_MEMBER \
+ , BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NONMEMBER \
+ )( is_exp, name, param_dets, this_mem_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_MEMBER( is_exp, name \
+ , param_dets \
+ , this_mem_dets, ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( this_mem_dets ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_MEMBER_ \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL \
+)( is_exp, name, param_dets, this_mem_dets, __VA_ARGS__ )
+
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_MEMBER_( is_exp, name \
+ , param_dets \
+ , this_mem_dets, ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME( this_mem_dets ) ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CONSTRUCTOR \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NOT_CONSTRUCTOR \
+)( is_exp, name, param_dets, this_mem_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CONSTRUCTOR( is_exp, name \
+ , param_dets \
+ , this_mem_dets \
+ , ... \
+ ) \
+(1)(1)(is_exp)(1)(0)(0)(param_dets) \
+( ( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE( this_mem_dets ) ) ) \
+((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NOT_CONSTRUCTOR( is_exp, name \
+ , param_dets \
+ , this_mem_dets\
+ , ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITAND \
+ ( BOOST_GENERIC_DETAIL_IS_DESTROY \
+ ( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME( this_mem_dets ) ) \
+ , BOOST_PP_COMPL( is_exp ) \
+ ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_DESTRUCTOR \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL \
+)( name, param_dets, this_mem_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_DESTRUCTOR( name, param_dets \
+ , this_mem_dets \
+ , ... \
+ ) \
+(1)(1)(0)(0)(1)(0)(param_dets) \
+( ( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE( this_mem_dets ) ) ) \
+((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NONMEMBER( is_exp, name \
+ , param_dets \
+ , this_mem_dets, ... \
+ ) \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NONMEMBER_ \
+( is_exp, name, param_dets, this_mem_dets \
+, BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS( name ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_NONMEMBER_( is_exp, name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets, ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IS_PARTIAL( op_dets ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CONVERSION_OP \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL \
+)( is_exp, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_CONVERSION_OP( is_exp, name \
+ , param_dets \
+ , this_mem_dets \
+ , op_dets, ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IS_VALID( op_dets ) \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_CONVERSION \
+, BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_PARTIAL \
+)( is_exp, name, param_dets, this_mem_dets, op_dets, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IMPL_VALID_CONVERSION( is_exp, name\
+ , param_dets \
+ , this_mem_dets\
+ , op_dets, ... \
+ ) \
+(1)(1)(is_exp)(0)(0)(1)(param_dets) \
+((BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_TYPE(op_dets))) \
+((__VA_ARGS__))
+
+// Begin "is destroy" macros
+#define BOOST_GENERIC_DETAIL_IS_DESTROY( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROY( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_IS_DESTROY_ \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_DESTROY_( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY( BOOST_GENERIC_DETAIL_EAT_DESTROY( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROY( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROY_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROY_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROY \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_DESTROYdestroy ,
+
+// Begin "eat destroy" macros
+#define BOOST_GENERIC_DETAIL_EAT_DESTROY( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_DESTROY, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_DESTROYdestroy
+
+// Begin "starts with explicit" macros
+#define BOOST_GENERIC_DETAIL_IS_EXPLICIT( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_IS_EXPLICIT_ \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_IS_EXPLICIT_( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY \
+( BOOST_GENERIC_DETAIL_EAT_EXPLICIT( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICIT \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_EXPLICITexplicit ,
+
+// Begin "eat explicit" macros
+#define BOOST_GENERIC_DETAIL_EAT_EXPLICIT( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_EXPLICIT, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_EXPLICITexplicit
+
+#endif // BOOST_GENERIC_DETAIL_NO_RETURN_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/num_args.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/num_args.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NUM_ARGS_HPP
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+#include <boost/preprocessor/variadic/size.hpp>
+
+// Special thanks to Jens Gustedt for handling the 0-argument case
+
+// Original implementation based on macros by Laurent Deniau
+
+#define BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( args ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS args
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_EMPTY( __VA_ARGS__ ) \
+ , BOOST_PP_IDENTITY( 0 ) \
+ , BOOST_PP_VARIADIC_SIZE \
+ )( __VA_ARGS__ )
+
+#endif // BOOST_GENERIC_DETAIL_NUM_ARGS_HPP

Added: sandbox/generic/include/boost/generic/detail/num_args_is_1.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/num_args_is_1.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1_HPP
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 1 )
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_1( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN( __VA_ARGS__ ), 1 )
+
+#define BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS_IS_1( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( __VA_ARGS__ ), 1 )
+
+#endif // BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1_HPP

Added: sandbox/generic/include/boost/generic/detail/num_args_is_2.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/num_args_is_2.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_NUM_ARGS_IS_2_HPP
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_IS_2_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_IS_2( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 2 )
+
+#define BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN( __VA_ARGS__ ), 2 )
+
+#define BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS_IS_2( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( __VA_ARGS__ ), 2 )
+
+#endif // BOOST_GENERIC_DETAIL_NUM_ARGS_IS_2_HPP

Added: sandbox/generic/include/boost/generic/detail/operator_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/operator_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,422 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_OPERATOR_DETS_HPP
+#define BOOST_GENERIC_DETAIL_OPERATOR_DETS_HPP
+
+#include <boost/generic/detail/is_operator.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Takes operator of the form:
+// operator nonempty_nonparenthesized_type
+// And yields:
+// (validity_bit)(partial_bit)(type)
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_INVALID( ... ) \
+(0)(0)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_PARTIAL( ... ) \
+(0)(1)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_VALID( ... ) \
+(1)(1)((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_ \
+( BOOST_GENERIC_DETAIL_EAT_OPERATOR( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_PARTIAL \
+ , BOOST_GENERIC_DETAIL_CONVERSION_OPERATOR_DETS_IMPL_VALID \
+ )( __VA_ARGS__ )
+
+// Takes operator of the form:
+// operator nonmember_operator_name
+// And yields:
+// (validity_bit)(partial_bit)(nonmember_operator_name)
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_NONBASIC( dets ) \
+BOOST_GENERIC_DETAIL_IS_NONBASIC_OP \
+( BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_NAME( dets ) )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_INVALID( ... ) \
+(0)(0)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_PARTIAL( ... ) \
+(0)(1)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_VALID( name ) \
+(1)(1)(name)
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_ \
+( BOOST_GENERIC_DETAIL_EAT_OPERATOR( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IMPL_PARTIAL \
+ )( __VA_ARGS__ )
+
+// Takes operator of the form:
+// operator member_operator_name
+// And yields:
+// (validity_bit)(partial_bit)(member_operator_name)
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_OPERATOR( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_INVALID( ... ) \
+(0)(0)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_PARTIAL( ... ) \
+(0)(1)(invalid_operator)
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_VALID( name ) \
+(1)(1)(name)
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_ \
+( BOOST_GENERIC_DETAIL_EAT_OPERATOR( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IMPL_PARTIAL \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_OPERATOR( op_name ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_OPERATOR, op_name )
+
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYplus 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYminus 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYmultiply 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYdivide 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYmodulus 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYunary_plus 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYnegate 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYless 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYgreater 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYless_equal 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYgreater_equal 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYequal_to 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYnot_equal_to 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYlogical_and 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYlogical_or 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYlogical_not 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_and 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_or 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_xor 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYcomplement 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYleft_shift 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYright_shift 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYdereference 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYaddress_of 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYsubscript 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYcall 0
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYassign 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYplus_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYminus_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYmultiply_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYdivide_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYmodulus_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_and_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_or_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYbit_xor_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYleft_shift_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYright_shift_assign 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYpreincrement 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYpostincrement 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYpredecrement 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYpostdecrement 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYcomma 2
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYnew 0
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYnew_array 0
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYdelete 0
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYdelete_array 0
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYarrow 1
+#define BOOST_GENERIC_DETAIL_OPERATOR_ARITYarrow_dereference 2
+
+#define BOOST_GENERIC_DETAIL_OPERATORplus +
+#define BOOST_GENERIC_DETAIL_OPERATORminus -
+#define BOOST_GENERIC_DETAIL_OPERATORmultiply *
+#define BOOST_GENERIC_DETAIL_OPERATORdivide /
+#define BOOST_GENERIC_DETAIL_OPERATORmodulus %
+#define BOOST_GENERIC_DETAIL_OPERATORunary_plus +
+#define BOOST_GENERIC_DETAIL_OPERATORnegate -
+#define BOOST_GENERIC_DETAIL_OPERATORless <
+#define BOOST_GENERIC_DETAIL_OPERATORgreater >
+#define BOOST_GENERIC_DETAIL_OPERATORless_equal <=
+#define BOOST_GENERIC_DETAIL_OPERATORgreater_equal >=
+#define BOOST_GENERIC_DETAIL_OPERATORequal_to ==
+#define BOOST_GENERIC_DETAIL_OPERATORnot_equal_to !=
+#define BOOST_GENERIC_DETAIL_OPERATORlogical_and &&
+#define BOOST_GENERIC_DETAIL_OPERATORlogical_or ||
+#define BOOST_GENERIC_DETAIL_OPERATORlogical_not !
+#define BOOST_GENERIC_DETAIL_OPERATORbit_and &
+#define BOOST_GENERIC_DETAIL_OPERATORbit_or |
+#define BOOST_GENERIC_DETAIL_OPERATORbit_xor ^
+#define BOOST_GENERIC_DETAIL_OPERATORcomplement ~
+#define BOOST_GENERIC_DETAIL_OPERATORleft_shift <<
+#define BOOST_GENERIC_DETAIL_OPERATORright_shift >>
+#define BOOST_GENERIC_DETAIL_OPERATORdereference *
+#define BOOST_GENERIC_DETAIL_OPERATORaddress_of &
+#define BOOST_GENERIC_DETAIL_OPERATORsubscript []
+#define BOOST_GENERIC_DETAIL_OPERATORcall ()
+#define BOOST_GENERIC_DETAIL_OPERATORassign =
+#define BOOST_GENERIC_DETAIL_OPERATORplus_assign +=
+#define BOOST_GENERIC_DETAIL_OPERATORminus_assign -=
+#define BOOST_GENERIC_DETAIL_OPERATORmultiply_assign *=
+#define BOOST_GENERIC_DETAIL_OPERATORdivide_assign /=
+#define BOOST_GENERIC_DETAIL_OPERATORmodulus_assign %=
+#define BOOST_GENERIC_DETAIL_OPERATORbit_and_assign &=
+#define BOOST_GENERIC_DETAIL_OPERATORbit_or_assign |=
+#define BOOST_GENERIC_DETAIL_OPERATORbit_xor_assign ^=
+#define BOOST_GENERIC_DETAIL_OPERATORleft_shift_assign <<=
+#define BOOST_GENERIC_DETAIL_OPERATORright_shift_assign >>=
+#define BOOST_GENERIC_DETAIL_OPERATORpreincrement ++
+#define BOOST_GENERIC_DETAIL_OPERATORpostincrement ++
+#define BOOST_GENERIC_DETAIL_OPERATORpredecrement --
+#define BOOST_GENERIC_DETAIL_OPERATORpostdecrement --
+#define BOOST_GENERIC_DETAIL_OPERATORcomma ,
+#define BOOST_GENERIC_DETAIL_OPERATORnew new
+#define BOOST_GENERIC_DETAIL_OPERATORnew_array new[]
+#define BOOST_GENERIC_DETAIL_OPERATORdelete delete
+#define BOOST_GENERIC_DETAIL_OPERATORdelete_array delete[]
+#define BOOST_GENERIC_DETAIL_OPERATORarrow ->
+#define BOOST_GENERIC_DETAIL_OPERATORarrow_dereference ->*
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATOR( name, arg_dets ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_INVOKE_OPERATOR, name )( arg_dets )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORplus( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
++ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORminus( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+- BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORmultiply( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+* BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORdivide( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+/ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORmodulus( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+% BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORunary_plus( arg_dets ) \
++BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORnegate( arg_dets ) \
+-BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORless( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+< BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORgreater( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+> BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORless_equal( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+<= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORgreater_equal( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+>= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORequal_to( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+== BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORnot_equal_to( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+!= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORlogical_and( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+&& BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORlogical_or( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+|| BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORlogical_not( arg_dets ) \
+!BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_and( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+& BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_or( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+| BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_xor( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+^ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORcomplement( arg_dets ) \
+~BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORleft_shift( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+<< BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORright_shift( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+>> BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORdereference( arg_dets ) \
+*BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORaddress_of( arg_dets ) \
+&BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORsubscript( arg_dets ) \
+BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+[ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 ) ]
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORcall( arg_dets ) \
+BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+( BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARGS_WITHOUT_FRONT( arg_dets ) )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORassign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+^ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORplus_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
++= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORminus_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+-= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORmultiply_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+*= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORdivide_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+/= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORmodulus_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+%= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_and_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+&= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_or_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+|= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORbit_xor_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+^= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORleft_shift_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+<<= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORright_shift_assign( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+>>= BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORpreincrement( arg_dets ) \
+++BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORpostincrement( arg_dets ) \
+BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )++
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORpredecrement( arg_dets ) \
+--BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORpostdecrement( arg_dets ) \
+BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )--
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORcomma( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+, BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+// ToDo: Fix this (detect num params and call accordingly as mem or nonmem)
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORnew( arg_dets ) \
+new BOOST_GENERIC_DETAIL_ARG_DETS_CLASS_TYPE( arg_dets )
+
+// ToDo: Fix this (detect num params and call accordingly as mem or nonmem)
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORnew_array( arg_dets ) \
+new BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )[1]
+
+// ToDo: Fix this (detect num params and call accordingly as mem or nonmem)
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORdelete( arg_dets ) \
+delete BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 )[1]
+
+// ToDo: Fix this (detect num params and call accordingly as mem or nonmem)
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORdelete_array( arg_dets )
+
+// ToDo: Fix -- only call it this way if it's not a pointer
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORarrow( arg_dets ) \
+BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ).operator ->()
+
+#define BOOST_GENERIC_DETAIL_INVOKE_OPERATORarrow_dereference( arg_dets ) \
+ BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 0 ) \
+->* BOOST_GENERIC_DETAIL_ARG_DETS_DECLVAL_ARG( arg_dets, 1 )
+
+#endif // BOOST_GENERIC_DETAIL_OPERATOR_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/ordered_iif.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/ordered_iif.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,162 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_ORDERED_IIF_HPP
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_HPP
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Takes macro arguments of the form:
+// data
+// , default_macro
+// , ( transform0 )( condition0 )( macro0 )
+// , ( transform1 )( condition1 )( macro1 )
+// , // etc.
+//
+// And does the equivalent of:
+// if( condition0( transform0( data ) ) )
+// macro0( transform0( data ) )
+// else
+// if( condition1( transform1( data ) ) )
+// macro1( transform1( data ) )
+// else
+// // etc.
+// else
+// default_macro( data )
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF( data, default_macro, ... ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL \
+( data \
+, BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) \
+ ((BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_OP) \
+ (BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_PRED) \
+ (default_macro) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_PRED( data ) 1
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_OP( data ) data
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_ELEM( state ) \
+BOOST_PP_SEQ_ELEM( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) \
+ , BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_TRANSFORM( state ) \
+BOOST_PP_SEQ_ELEM( 0, BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_ELEM( state ) )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_PRED( state ) \
+BOOST_PP_SEQ_ELEM( 1, BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_ELEM( state ) )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_MACRO( state ) \
+BOOST_PP_SEQ_ELEM( 2, BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_ELEM( state ) )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_TRANSFORMED_DATA( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+// ToDo: Deduce the reentrancy value
+// State is of the form:
+// (curr_elem_index)(data)(seq)(transformed_data)
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL( data, seq ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_MACRO \
+( BOOST_PP_WHILE \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_PRED \
+ , BOOST_GENERIC_DETAIL_ORDERED_IIF_OP \
+ , BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL \
+ ( d, (0)(data)(seq)(~) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_OP( d, state ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL \
+( d \
+, ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) ) ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) ) \
+ ( ~ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL( d, state ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_TRANSFORM( state ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_PRED( d, state ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_PRED( state ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_TRANSFORMED_DATA( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_MACRO( state ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_MACRO( state ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_TRANSFORMED_DATA( state ) )
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_1( data, default_macro, ... ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_1 \
+( data \
+, BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) \
+ ((BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_OP) \
+ (BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_DEFAULT_PRED) \
+ (default_macro) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_IMPL_1( data, seq ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_MACRO_1 \
+( BOOST_PP_WHILE \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_PRED_1 \
+ , BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_1 \
+ , BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL_1 \
+ ( d, (0)(data)(seq)(~) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_1( d, state ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL_1 \
+( d \
+, ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) ) ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) ) \
+ ( ~ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_OP_IMPL_1( d, state ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_INDEX( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_SEQ( state ) ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_TRANSFORM( state ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_DATA( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_PRED_1( d, state ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_PRED( state ) \
+ ( BOOST_GENERIC_DETAIL_ORDERED_IIF_TRANSFORMED_DATA( state ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_ORDERED_IIF_MACRO_1( state ) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF_CURR_MACRO( state ) \
+( BOOST_GENERIC_DETAIL_ORDERED_IIF_TRANSFORMED_DATA( state ) )
+
+#endif // BOOST_GENERIC_DETAIL_ORDERED_IIF_HPP

Added: sandbox/generic/include/boost/generic/detail/param.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_HPP
+
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/split_param_id_and_param.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+
+// A macro that assigns a unique value to each different parameter kind
+// This macro takes the entire argument including the name
+#define BOOST_GENERIC_DETAIL_PARAM( arg_in_paren ) \
+BOOST_GENERIC_DETAIL_RESCAN \
+( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM( arg_in_paren ) )() \
+)
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_HPP

Added: sandbox/generic/include/boost/generic/detail/param_id.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_id.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_ID_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/split_param_id_and_param.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// A macro that assigns a single-token name to each parambased on its param id
+// (it removes spaces from multiword param ids and replaces them with _)
+#define BOOST_GENERIC_DETAIL_PARAM_ID( arg_in_paren ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM( arg_in_paren ) )
+
+#define BOOST_GENERIC_DETAIL_SPACED_ID( param_id ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_SPACED_ID_, param_id )
+
+#define BOOST_GENERIC_DETAIL_SPACED_ID_const const
+#define BOOST_GENERIC_DETAIL_SPACED_ID_for for
+#define BOOST_GENERIC_DETAIL_SPACED_ID_for_typedef for typedef
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if if
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if_not if not
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if_typedef if typedef
+#define BOOST_GENERIC_DETAIL_SPACED_ID_public public
+#define BOOST_GENERIC_DETAIL_SPACED_ID_try try
+#define BOOST_GENERIC_DETAIL_SPACED_ID_typename typename
+#define BOOST_GENERIC_DETAIL_SPACED_ID_using using
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_ID_HPP

Added: sandbox/generic/include/boost/generic/detail/param_id_category.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_id_category.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,35 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_HPP
+
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// Whenever a category is added, the value macros must also be updated in
+// <boost/generic/detail/param_id_category_value.hpp>
+
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( arg_in_paren ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_ \
+ , BOOST_GENERIC_DETAIL_PARAM_ID( arg_in_paren ) \
+ )
+
+// Macros that associate param IDs with the category that they belong to
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_const const
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_for for
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_for_typedef for_typedef
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_if if
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_if_not if_not
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_if_typedef if_typedef
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_public public
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_try try
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_typename typename
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_using using
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_HPP

Added: sandbox/generic/include/boost/generic/detail/param_id_category_value.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_id_category_value.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_HPP
+
+#include <boost/generic/detail/param_id_category.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// Whenever a category value is added, the category macros must also be updated
+// in <boost/generic/detail/param_id_category.hpp>
+
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE( arg_in_paren ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_ \
+ , BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY( arg_in_paren ) \
+ )
+
+// Macros that associate each param category ID with a unique value
+// Note: If a category is added, it is important to update
+// BOOST_GENERIC_DETAIL_NUM_PARAM_CATEGORIES as well
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_const 0
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_for 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_for_typedef 2
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_if 3
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_if_not 4
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_if_typedef 5
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_public 6
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_try 7
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_typename 8
+#define BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_using 9
+
+// Update this whenever a new category is added
+#define BOOST_GENERIC_DETAIL_NUM_PARAM_CATEGORIES 10
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_ID_CATEGORY_VALUE_HPP

Added: sandbox/generic/include/boost/generic/detail/param_id_implies_parentheses.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_id_implies_parentheses.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,34 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES_HPP
+
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// A macro that assigns a unique value to each different parameter kind
+// This macro takes the entire argument including the name
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES( arg_in_paren ) \
+BOOST_PP_CAT \
+( BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_ \
+, BOOST_GENERIC_DETAIL_PARAM_ID( arg_in_paren ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_const 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_for 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_for_typedef 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_if 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_if_not 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_if_typedef 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_public 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_try 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_typename 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PAREN_using 1
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_ID_IMPLIES_PARENTHESES_HPP

Added: sandbox/generic/include/boost/generic/detail/param_id_value.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_id_value.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,34 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_HPP
+
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// A macro that assigns a unique value to each different parameter kind
+// This macro takes the entire argument including the name
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE( arg_in_paren ) \
+BOOST_PP_CAT \
+( BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_ \
+, BOOST_GENERIC_DETAIL_PARAM_ID( arg_in_paren ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_const 0
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_for 1
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_for_typedef 2
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_if 3
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_if_not 4
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_if_typedef 5
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_public 6
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_try 7
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_typename 8
+#define BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_using 9
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_ID_VALUE_HPP

Added: sandbox/generic/include/boost/generic/detail/param_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_list.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,532 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_LIST_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <utility>
+#endif
+
+#include <boost/preprocessor/array/elem.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/list/fold_left.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/num_args_is_1.hpp>
+#include <boost/generic/detail/params_for_each.hpp>
+#include <boost/generic/detail/params_to_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/simplify_variadic_param_list.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+
+// Takes a suspected parameter list and yields a sequence result of the form
+// (parenthesized_bit)(validity_bit)(void_bit)((param_part))((post_param_part))
+// where parenthesized_bit is 1 if the argument starts parenthesized, else 0
+// where validity_bit is 1 if the paramaeter list is valid, else 0
+// where void_bit is 1 if the paramaeter list is nullary, else 0
+// where (param_part) is a parenthesized param list
+// where (post_param_part) is the part after the parameter list, parenthesized
+// Note: the (param_part) element will not exist if the param list is invalid
+// Note: A parameter list is of the form
+// ( (type) param_name, (other_type) other_param_name ... ) qualifiers
+// Note: A void parameter list must be specified as ()
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IMPL \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NOT_PARENTHESIZED \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AFTER_RESCAN_( (__VA_ARGS__) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AFTER_RESCAN_( ... ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS __VA_ARGS__
+
+// Macros used to extract information from the yielded value of the above macro
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART_AS_ARRAY(dets) \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NUM_PARAMS( dets ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NUM_PARAMS( dets ) \
+BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS(dets) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS_IMPL \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS_IMPL( \
+ dets\
+ ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_HAS_POST_PARAM_LIST_PART( dets ) )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARE_ALL_CLASS_OR_TYPENAME(dets)\
+BOOST_GENERIC_DETAIL_ARE_ALL_CLASS_OR_TYPENAME \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 4, dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_HAS_POST_PARAM_LIST_PART(dets) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS_IMPL \
+ )( dets )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_PARAMS( dets, id ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_PARAMS_IMPL \
+ )( dets, id )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_ARGS( dets, id ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_ARGS_IMPL \
+ )( dets, id )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_PARAMS( dets, aug ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_PARAMS_IMPL \
+ )( dets, aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_EMPTY_NAME_AND_PARAMS( dets \
+ , name \
+ ) \
+name()
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS_IMPL(dets,name)\
+name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS( dets, name ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_EMPTY_NAME_AND_PARAMS \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NAME_AND_PARAMS_IMPL \
+ )( dets, name )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS_IMPL( dets ) \
+BOOST_GENERIC_DETAIL_PARAMS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_PARAMS_IMPL( dets \
+ , id \
+ ) \
+BOOST_GENERIC_DETAIL_FORCED_NAME_PARAMS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ), id )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FORCED_NAME_ARGS_IMPL( dets \
+ , id \
+ ) \
+BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ), id )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_PARAMS_IMPL( dets \
+ , aug \
+ ) \
+BOOST_GENERIC_DETAIL_AUGMENTED_PARAMS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ), aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_TRAILING_PARAM_LIST( dets ) \
+BOOST_PP_COMMA_IF \
+( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) ) \
+) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS_IMPL \
+ )( dets )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_ARGS( dets, aug ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_ARGS_IMPL \
+ )( dets, aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS_IMPL( dets ) \
+BOOST_GENERIC_DETAIL_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_ARGS_IMPL( dets, aug)\
+BOOST_GENERIC_DETAIL_AUGMENTED_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ), aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_TRAILING_ARGS( dets ) \
+BOOST_PP_COMMA_IF \
+( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) ) \
+) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( dets ) \
+BOOST_GENERIC_DETAIL_PARAM_TYPES \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_TRAILING_PARAM_TYPES( dets ) \
+BOOST_PP_COMMA_IF \
+( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) ) \
+) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_TYPES( dets )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS( dets ) \
+BOOST_GENERIC_DETAIL_DECLVAL_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FUN_CALL_DECLVAL_ARGS( dets ) \
+BOOST_GENERIC_DETAIL_FUN_CALL_DECLVAL_ARGS \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_I( dets, i ) \
+BOOST_GENERIC_DETAIL_PARAM_TYPES_MACRO \
+( s, ~, 0 \
+, BOOST_PP_ARRAY_ELEM \
+ ( i, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART_AS_ARRAY(dets) )\
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( dets, i ) \
+BOOST_GENERIC_DETAIL_DECLVAL_ARGS_MACRO \
+( s, ~, 0 \
+, BOOST_PP_ARRAY_ELEM \
+ ( i, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAM_LIST_PART_AS_ARRAY(dets) )\
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_TRAILING_DECLVAL_ARGS( dets ) \
+BOOST_PP_COMMA_IF \
+( BOOST_PP_COMPL \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( dets ) ) \
+) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS( dets )
+
+// param_list is guaranteed to start parenthesized at this point
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_VOID_IMPL \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NONVOID_IMPL \
+)( __VA_ARGS__ )
+
+// Used to check validity when a nonbasic void parameter list is expected
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NONVOID_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT \
+ ( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NONBASIC_NONVOID_IMPL \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_INVALID_IMPL \
+)( __VA_ARGS__ )
+
+// Used to check validity when a nonbasic void parameter list is expected
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_VOID_IMPL( ... ) \
+( 1 ) \
+( 1 ) \
+( 1 ) \
+( () ) \
+( ( BOOST_GENERIC_DETAIL_EAT __VA_ARGS__ ) )
+
+// The macro that yields the result for a nonbasic, nonvoid parameter list
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NONBASIC_NONVOID_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_NONBASIC_IMPL( __VA_ARGS__ )\
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FULLY_NONBASIC \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_INVALID_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FULLY_NONBASIC_RESCAN( ... ) \
+__VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FULLY_NONBASIC( ... ) \
+( 1 )( 1 )( 0 ) \
+( ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_FULLY_NONBASIC_RESCAN \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC \
+ BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) \
+ ) \
+ ) \
+) \
+( ( BOOST_GENERIC_DETAIL_EAT __VA_ARGS__ ) )
+
+
+
+
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL( ... ) \
+if num_args > 3
+ if empty( tail( args ) ) && empty( tail( tail( args) ) )
+ eat_part_after_parent( head( args ) ) boost_generic_detail_variadic part_after_paren( head ) eat_variadic
+ else
+ head( args ) dont_eat_variadic
+ ( tail( args ) )
+
+#endif
+
+
+
+
+
+// Yields 1 if a parameter list is fully nonbasic, else 0
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_NONBASIC_IMPL( ... ) \
+BOOST_PP_LIST_FOLD_LEFT \
+( BOOST_GENERIC_DETAIL_IS_NONBASIC_PARAM, 1 \
+, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST \
+ ( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) ) \
+)
+
+// The macro that checks if a parameter is a valid nonbasic param
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_PARAM( s, state, param ) \
+BOOST_PP_BITAND \
+( state \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( param ) \
+ , BOOST_GENERIC_DETAIL_IS_NONBASIC_PARAM_IMPL \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ )( param ) \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_NONBASIC_PARAM_IMPL( param ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( param ) ) \
+ ) \
+)
+
+// The macro that yields the result when the argument wasn't parenthesized
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_NOT_PARENTHESIZED( ... ) \
+( 0 )( 0 )( 0 )(())(())
+
+// The macro that yields the result when the argument was partially nonbasic
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_INVALID_IMPL( ... ) \
+( 1 )( 0 )( 0 ) \
+( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) ) \
+( ( BOOST_GENERIC_DETAIL_EAT __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_PARAM_TYPES_MACRO( s, data, i, elem ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND( elem )
+
+#define BOOST_GENERIC_DETAIL_ARGS_MACRO( s, data, i, elem ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_PASS_ARG( elem )
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO( s, id, i, elem ) \
+BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_ \
+( id, i, BOOST_GENERIC_DETAIL_EAT elem )
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_( id, i, elem ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_EMPTY( elem ) \
+ , BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_EMPTY \
+ , BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_NONEMPTY \
+ )( id, i, elem )
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_EMPTY( id, i, elem ) \
+BOOST_PP_CAT( id, i )
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO_NONEMPTY( id, i, elem ) \
+elem
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_AUGMENTED_ARGS_MACRO( s, aug, i, elem ) \
+BOOST_PP_CAT( BOOST_GENERIC_DETAIL_EAT elem, aug )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAMS_MACRO( s, data, i, elem ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND( elem ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_NAME( elem )
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_PARAMS_MACRO( s, id, i, elem ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND
+BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO( s, id, i, elem )
+
+#endif
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_AUGMENTED_PARAMS_MACRO( s, data, i, elem ) \
+BOOST_GENERIC_DETAIL_PARAM_TYPES_MACRO( s, data, i, elem ) \
+BOOST_GENERIC_DETAIL_AUGMENTED_ARGS_MACRO( s, data, i, elem )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_DECLVAL_ARGS_MACRO( s, data, i, elem ) \
+::std::declval< BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_NAME( elem ) >() \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_DDD_IF_VARIADIC( elem )
+
+#define BOOST_GENERIC_DETAIL_PARAM_TYPES( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_PARAM_TYPES_MACRO, ~ \
+, params \
+)
+
+#define BOOST_GENERIC_DETAIL_ARGS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_ARGS_MACRO, ~ \
+, params \
+)
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_AUGMENTED_ARGS( params, aug ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_AUGMENTED_ARGS_MACRO, aug \
+, params \
+)
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_PARAMS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_PARAMS_MACRO, ~ \
+, params \
+)
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_PARAMS( params, id ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_FORCED_NAME_PARAMS_MACRO, id \
+, params \
+)
+
+#endif
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS( params, id ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_FORCED_NAME_ARGS_MACRO, id \
+, params \
+)
+
+#endif
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_AUGMENTED_PARAMS( params, aug ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_AUGMENTED_PARAMS_MACRO, aug \
+, params \
+)
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_DECLVAL_ARGS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_DETAIL_DECLVAL_ARGS_MACRO, ~ \
+, params \
+)
+
+#define BOOST_GENERIC_DETAIL_FUN_CALL_DECLVAL_ARGS( params ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS_IS_1( params ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+, BOOST_GENERIC_DETAIL_FUN_CALL_DECLVAL_ARGS_IMPL \
+)( params )
+
+#define BOOST_GENERIC_DETAIL_FUN_CALL_DECLVAL_ARGS_IMPL( params ) \
+BOOST_GENERIC_DETAIL_DECLVAL_ARGS \
+( ( BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( params ) ) )
+
+// ToDo: Optimize this by not calling BOOST_GENERIC_DETAIL_PARAM_TYPES
+#define BOOST_GENERIC_DETAIL_ARE_ALL_CLASS_OR_TYPENAME( params ) \
+BOOST_PP_LIST_FOLD_LEFT \
+( BOOST_GENERIC_DETAIL_IS_CLASS_OR_TYPENAME_MACRO, 1 \
+, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST \
+ ( ( BOOST_GENERIC_DETAIL_PARAM_TYPES( params ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_CLASS_OR_TYPENAME_MACRO( d, state, param ) \
+BOOST_PP_BITAND \
+( state \
+, BOOST_PP_EQUAL \
+ ( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_PP_CAT( BOOST_GENERIC_DETAIL_IS_CLASS_OR_TYPENAME_HELPER_ \
+ , param \
+ ) \
+ ) \
+ , 2 \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_IS_CLASS_OR_TYPENAME_HELPER_class _1, _2
+#define BOOST_GENERIC_DETAIL_IS_CLASS_OR_TYPENAME_HELPER_typename _1, _2
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_LIST_HPP

Added: sandbox/generic/include/boost/generic/detail/param_templates.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/param_templates.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,264 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAM_TEMPLATES_HPP
+#define BOOST_GENERIC_DETAIL_PARAM_TEMPLATES_HPP
+
+#include <boost/generic/support.hpp>
+
+#ifndef BOOST_NO_BOOST_GENERIC
+
+#include <boost/generic/limits.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/empty_base.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#if 0
+
+#if !( BOOST_NO_BOOST_GENERIC_PARAM( auto if ) \
+ && BOOST_NO_BOOST_GENERIC_PARAM( auto not ) \
+ )
+#include <boost/mpl/apply.hpp>
+#endif
+
+#else
+
+#include <boost/mpl/apply.hpp>
+
+#endif
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+#include <boost/type_traits/add_rvalue_reference.hpp>
+#else
+#include <boost/type_traits/add_reference.hpp>
+#endif
+
+// Headers needed if we have to simulate variadic templates
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+#endif // End check for variadic templates
+
+// ToDo: Use is_convertible to bool checks in the SFINAE conditions for the
+// metafunction versions of the if, not, auto if, and auto not arguments
+
+// ToDo: Implement auto family of argument types
+
+namespace boost { namespace generic { namespace detail {
+
+// Used for triggering SFINAE
+template< class DummyType, class OtherDummyType = void >
+struct always_void { typedef void type; };
+
+// Used for triggering SFINAE
+template< bool DummyBoolValue >
+struct always_void_by_bool { typedef void type; };
+
+// Used for triggering SFINAE
+template< class AlwaysType, class DummyType = void >
+struct always { typedef AlwaysType type; };
+
+//Used to specify a condition that is required for an auto function
+template< bool Value >
+struct if_ {};
+
+template<>
+struct if_< true > { typedef void type; };
+
+////////////////////////////////////////////////////////////////////////////////
+// Here's where some magic happens... the BOOST_GENERIC macro allows //
+// "if" to take either a value or a type, and automatically handles both //
+// without the user having to tell the macro which one it is passing. The //
+// trick I use internally relies on the fact that bool( arg ) is a function //
+// type when "arg" is a type, and a compile-time constant bool when "arg" is a//
+// compile-time constant convertible to bool. So, if I make two function //
+// template overloads, one which takes a compile-time bool as a template //
+// argument, and another that takes a type, I can make the expression //
+// "decltype( make_if< bool( arg ) >() )" "do the right thing" in both //
+// cases. Further, since "arg" is now parenthesized, expressions that have a >//
+// such as "sizeof( left ) > sizeof( right )" won't incorrectly end the //
+// template argument list. //
+////////////////////////////////////////////////////////////////////////////////
+template< bool Value >
+typename if_< Value >::type
+your_if_condition_isnt_dependent_on_a_function_template_argument();
+
+template< class FunctionType, class Enabler = void >
+struct result_of_if_check;
+
+template< class BoolMetavalue >
+struct result_of_if_check
+ < bool ( BoolMetavalue )
+ , typename always_void_by_bool< BoolMetavalue::value >::type
+ >
+ : if_< BoolMetavalue::value > {};
+
+template< class ValueAsFunctionParam >
+typename result_of_if_check< ValueAsFunctionParam >::type
+your_if_condition_isnt_dependent_on_a_function_template_argument();
+
+//template< bool Value >
+//typename if_< Value >::type perform_auto_if_check();
+
+template< class ReturnType, class FunctionType, class Enabler = void >
+struct result_of_perform_auto_if_check;
+
+template< class ReturnType, class BoolMetafunction >
+struct result_of_perform_auto_if_check
+ < ReturnType, bool ( BoolMetafunction )
+ , typename always_void_by_bool
+ < ::boost::mpl::apply< BoolMetafunction, ReturnType >::type::value >
+ ::type
+ >
+ : if_< ::boost::mpl::apply< BoolMetafunction, ReturnType >::type::value > {};
+
+template< class ReturnType, class ValueAsFunctionParam >
+typename result_of_perform_auto_if_check
+< ReturnType, ValueAsFunctionParam >::type
+perform_auto_if_check();
+
+template< class ReturnType, class FunctionType, class Enabler = void >
+struct result_of_perform_auto_not_check;
+
+template< class ReturnType, class BoolMetafunction >
+struct result_of_perform_auto_not_check
+ < ReturnType, bool ( BoolMetafunction )
+ , typename always_void_by_bool
+ < ::boost::mpl::apply< BoolMetafunction, ReturnType >::type::value >
+ ::type
+ >
+ : if_< !::boost::mpl::apply< BoolMetafunction, ReturnType >::type::value > {};
+
+template< class ReturnType, class ValueAsFunctionParam >
+typename result_of_perform_auto_not_check
+< ReturnType, ValueAsFunctionParam >::type
+perform_auto_not_check();
+
+template< bool Value >
+typename if_< !Value >::type
+your_if_not_condition_isnt_dependent_on_a_function_template_argument();
+
+template< class FunctionType, class Enabler = void >
+struct result_of_perform_not_check;
+
+template< class BoolMetavalue >
+struct result_of_perform_not_check
+ < bool ( BoolMetavalue )
+ , typename always_void_by_bool< BoolMetavalue::value >::type
+ >
+ : if_< !BoolMetavalue::value > {};
+
+template< class ValueAsFunctionParam >
+typename result_of_perform_not_check< ValueAsFunctionParam >::type
+your_if_not_condition_isnt_dependent_on_a_function_template_argument();
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+
+// Used with decltype in return types to get SFINAE
+template< class... T >
+struct types;
+
+#else
+
+// Used with decltype in return types to get SFINAE
+template< BOOST_PP_ENUM_BINARY_PARAMS
+ ( BOOST_PP_INC( BOOST_GENERIC_MAX_REQUIRES_EXPRESSIONS )
+ , class T, = void BOOST_PP_INTERCEPT
+ )
+ >
+struct types;
+
+#endif // End no variadic template check
+
+template< class T >
+struct perform_try_check;
+
+template< class ReturnType >
+ReturnType impl_explicit_type();
+
+template< class ReturnTypeMetafunction >
+typename ReturnTypeMetafunction::type impl_virtual_explicit_type();
+
+template< class PossibleReferenceType >
+typename remove_reference< PossibleReferenceType >::type
+impl_return_value_type();
+
+template< class DummyType >
+typename always_void< DummyType >::type impl_return_void_type();
+
+template< class ReturnType, class SFINAEType >
+typename always< ReturnType, SFINAEType >::type impl_explicit();
+
+template< class ReturnType, class SFINAEType >
+typename always< ReturnType, SFINAEType >::type impl_do();
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+
+template< typename T >
+struct return_expression_type : add_rvalue_reference< T > {};
+
+#else
+
+// ToDo: Possibly change this
+template< typename T >
+struct return_expression_type : add_reference< T > {};
+
+#endif
+
+template< class RawDoReturnType, class ExplicitType >
+struct is_raw_do_convertible_to_explicit_nonvoid
+ : is_convertible< typename return_expression_type< RawDoReturnType >::type
+ , ExplicitType
+ > {};
+
+template< class RawDoReturnType, class ExplicitType >
+struct is_raw_do_convertible_to_explicit
+ : mpl::if_< is_void< ExplicitType >
+ , mpl::true_
+ , is_raw_do_convertible_to_explicit_nonvoid< RawDoReturnType
+ , ExplicitType
+ >
+ >::type {};
+
+// A metafunction to determine if a 1-line return is compatible with an
+// explicitly-specified explicit_
+template< class ExplicitType, class RawDoReturnType >
+struct is_valid_explicit_for_raw_do
+ : mpl::and_
+ < mpl::equal_to< is_void< ExplicitType >, is_void< RawDoReturnType > >
+ , is_raw_do_convertible_to_explicit< RawDoReturnType, ExplicitType >
+ > {};
+
+template< class ExplicitType, class RawDoReturnType, class SFINAEType >
+struct impl_explicit_and_do_return_type
+ : mpl::if_
+ < is_valid_explicit_for_raw_do< ExplicitType, RawDoReturnType >
+ , mpl::identity< ExplicitType >
+ , mpl::empty_base
+ >::type {};
+
+template< class ExplicitType, class RawDoReturnType, class SFINAEType >
+typename impl_explicit_and_do_return_type
+< ExplicitType, RawDoReturnType, SFINAEType >::type
+impl_explicit_and_do();
+
+} } }
+
+#endif // End check for BOOST_GENERIC support
+
+#endif // BOOST_GENERIC_DETAIL_PARAM_TEMPLATES_HPP

Added: sandbox/generic/include/boost/generic/detail/params_for_each.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/params_for_each.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,72 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_HPP
+#define BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/params_to_list.hpp>
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/list/for_each.hpp>
+#include <boost/preprocessor/list/for_each_i.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+
+#define BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH( macro, data, params ) \
+BOOST_PP_LIST_FOR_EACH \
+( macro, data, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST_AFTER_RESCAN( params ) )
+
+#define BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_1( macro, data, params ) \
+BOOST_PP_SEQ_FOR_EACH \
+( macro, data \
+, BOOST_GENERIC_DETAIL_WRAPPED_ARGS_TO_SEQUENCE( params ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_I( macro, data, params ) \
+BOOST_PP_LIST_FOR_EACH_I( macro, data \
+ , BOOST_GENERIC_DETAIL_PARAMS_TO_LIST( params ) \
+ )
+
+// ToDo: Don't pass 0, deduce the correct value
+#define BOOST_GENERIC_DETAIL_PARAMS_ENUM_CALL_MACRO( macro, data, params ) \
+macro( 0, data, 0, BOOST_GENERIC_DETAIL_REMOVE_PAREN( params ) )
+
+// ToDo: Don't pass 0, deduce the correct value
+#define BOOST_GENERIC_DETAIL_PARAMS_ENUM_SIZE_GREATER_THAN_1(macro,data,params)\
+macro( 0, data, 0, BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( params ) ) \
+BOOST_PP_LIST_FOR_EACH_I \
+( BOOST_GENERIC_DETAIL_PARAMS_ENUM_COMMA_CALL_MACRO \
+, (macro)(data) \
+, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST \
+ ( ( BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( params ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAMS_ENUM_COMMA_CALL_MACRO(s,macro_data,i,param)\
+, BOOST_PP_SEQ_ELEM( 0, macro_data ) \
+ ( s, BOOST_PP_SEQ_ELEM( 1, macro_data ), BOOST_PP_INC( i ), param )
+
+#define BOOST_GENERIC_DETAIL_PARAMS_ENUM( macro, data, params ) \
+BOOST_PP_IIF \
+( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( params ), 1 ) \
+, BOOST_GENERIC_DETAIL_PARAMS_ENUM_CALL_MACRO \
+, BOOST_GENERIC_DETAIL_PARAMS_ENUM_SIZE_NOT_1 \
+)( macro, data, params )
+
+#define BOOST_GENERIC_DETAIL_PARAMS_ENUM_SIZE_NOT_1( macro, data, params ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( params ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_PARAMS_ENUM_SIZE_GREATER_THAN_1 \
+ )( macro, data, params )
+
+#endif // BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH_HPP

Added: sandbox/generic/include/boost/generic/detail/params_to_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/params_to_list.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PARAMS_TO_LIST_HPP
+#define BOOST_GENERIC_DETAIL_PARAMS_TO_LIST_HPP
+
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/wrap.hpp>
+#include <boost/preprocessor/tuple/to_list.hpp>
+
+#define BOOST_GENERIC_DETAIL_PARAMS_TO_LIST( params_in_paren ) \
+BOOST_PP_TUPLE_TO_LIST \
+( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( params_in_paren ) \
+, params_in_paren \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAMS_TO_LIST_AFTER_RESCAN( params_in_paren ) \
+BOOST_GENERIC_DETAIL_PARAMS_TO_LIST BOOST_GENERIC_DETAIL_WRAP( params_in_paren )
+
+#endif // BOOST_GENERIC_DETAIL_PARAMS_TO_LIST_HPP

Added: sandbox/generic/include/boost/generic/detail/piecewise_concept_maps.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/piecewise_concept_maps.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,314 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_HPP
+#define BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_HPP
+
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+#include <boost/generic/detail/map_index.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/params_for_each.hpp>
+#include <boost/generic/detail/type_stack.hpp>
+#include <boost/generic/detail/tag_type.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/empty_base.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost_generic_detail { namespace {
+
+template< class ThisConcept = void, class ThisConceptMap = void
+ , class OtherConceptMaps = void
+ >
+struct piecewise_concept_maps_t
+{
+ typedef ThisConcept this_concept;
+ typedef ThisConceptMap this_concept_map;
+ typedef typename OtherConceptMaps::next_index_t num_concept_maps_t;
+ static num_concept_maps_t num_concept_maps();
+ typedef map_index< num_concept_maps_t::value_c + 1 > next_index_t;
+ typedef typename OtherConceptMaps::concept_maps old_concept_maps;
+ // ToDo: Check for conclicts
+ // static_assert when unresolved conflict with information that says the file
+ // and line number of the conflicting declarations (file and line number in
+ // the static_assert requires c++0x user-defined literals
+ typedef typename push< old_concept_maps
+ , boost::mpl::pair< this_concept, this_concept_map >
+ >::type
+ concept_maps;
+ typedef tag_type< concept_maps > tag_t;
+ static next_index_t next_index();
+ static tag_t tag() { return tag_t(); }
+ template< class ConceptType >
+ decltype( OtherConceptMaps::concept_map_to_concept( ConceptType() ) )
+ concept_map_to_concept( ConceptType );
+ ThisConceptMap concept_map_to_concept( ThisConcept );
+};
+
+template< class >
+struct no_nested_type {};
+
+template<>
+struct piecewise_concept_maps_t<>
+{
+ static map_index< 0 > num_concept_maps();
+ typedef map_index< 1 > next_index_t;
+ static next_index_t next_index();
+ typedef type_stack<> concept_maps;
+ typedef tag_type< concept_maps > tag_t;
+ static tag_t tag() { return tag_t(); }
+ template< class ConceptType >
+ typename no_nested_type< ConceptType >::type
+ concept_map_to_concept( ConceptType );
+};
+
+piecewise_concept_maps_t<> boost_generic_detail_concept_maps_of( ... );
+
+template< class Concept, class Types
+ , class ConceptMap, class CallerConceptMap
+ >
+struct piecewise_concept_maps_impl_impl
+{
+ typedef piecewise_concept_maps_t
+ < Concept
+ , ConceptMap
+ , decltype
+ ( boost_generic_detail_concept_maps_of
+ ( Types()
+ , map_index<>()
+ , CallerConceptMap()
+ )
+ )
+ > type;
+
+ static type construct();
+};
+
+template< class Concept, class Types
+ , class ConceptMap, class CallerConceptMap
+ >
+struct piecewise_concept_maps_impl
+{
+ static_assert
+ ( sizeof( Concept ) != sizeof( Concept )
+ , "Error in Boost.Generic, please contact the library maintainer."
+ );
+};
+
+template< class Concept, class... T
+ , class ConceptMap, class CallerConceptMap
+ >
+struct piecewise_concept_maps_impl
+ < Concept, type_stack< T... >
+ , ConceptMap, CallerConceptMap
+ >
+ : boost::mpl::if_
+ < typename Concept::template impl< T... >
+ ::template is_valid_concept_map< ConceptMap >
+ , piecewise_concept_maps_impl_impl
+ < Concept, type_stack< T... >, ConceptMap, CallerConceptMap >
+ , boost::mpl::empty_base
+ >::type {};
+
+template< class Concept, class Types, class ConceptMap >
+struct piecewise_concept_maps_impl
+ < Concept, Types, ConceptMap, ConceptMap > {};
+
+template< class Concept, class Types, class ConceptMap
+ , class CallerConceptMap, class Condition
+ >
+struct piecewise_concept_maps_conditional_impl
+ : boost::mpl::if_
+ < Condition
+ , piecewise_concept_maps_impl
+ < Concept, Types, ConceptMap, CallerConceptMap >
+ , boost::mpl::empty_base
+ >::type {};
+
+template< class Concept, class Types, class ConceptMap
+ , class Condition
+ >
+struct piecewise_concept_maps_conditional_impl
+ < Concept, Types, ConceptMap, ConceptMap, Condition > {};
+
+} }
+
+#define BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP_TMP( concept_in_paren_ \
+ , template_params_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope" ) \
+namespace boost_generic_detail { namespace { \
+template< BOOST_GENERIC_DETAIL_REMOVE_PAREN( template_params_in_paren_ ) \
+ , class BoostGenericDetailCallerConceptMap = int \
+ > \
+BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_TYPE( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+boost_generic_detail_concept_maps_of \
+( type_stack< BOOST_GENERIC_DETAIL_REMOVE_PAREN( types_in_paren_ ) > \
+, decltype \
+ ( BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+ .next_index() \
+ ) const& \
+, BoostGenericDetailCallerConceptMap = int() \
+); \
+} }
+
+#define BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP_AUTO( concept_in_paren_ \
+ , template_params_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope" ) \
+namespace boost_generic_detail { namespace { \
+template< BOOST_GENERIC_DETAIL_REMOVE_PAREN( template_params_in_paren_ ) \
+ , class BoostGenericDetailCallerConceptMap = int \
+ > \
+BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_AUTO_TYPE( concept_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+boost_generic_detail_concept_maps_of \
+( type_stack< BOOST_GENERIC_DETAIL_REMOVE_PAREN( types_in_paren_ ) > \
+, decltype \
+ ( BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_AUTO( concept_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+ .next_index() \
+ ) const& \
+, BoostGenericDetailCallerConceptMap = int() \
+); \
+} }
+
+#define BOOST_GENERIC_DETAIL_REGISTER_CONCEPT_MAP( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE \
+( "Concept maps must be defined at global scope" ) \
+namespace boost_generic_detail { namespace { \
+template< class BoostGenericDetailCallerConceptMap = int > \
+BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_TYPE( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+boost_generic_detail_concept_maps_of \
+( type_stack< BOOST_GENERIC_DETAIL_REMOVE_PAREN( types_in_paren_ ) > \
+, decltype \
+ ( BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+ .next_index() \
+ ) const& \
+, BoostGenericDetailCallerConceptMap = int() \
+); \
+} }
+
+#define BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+piecewise_concept_maps_impl \
+< BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_in_paren_ ) \
+, type_stack< BOOST_GENERIC_DETAIL_REMOVE_PAREN( types_in_paren_ ) > \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( impl_name_in_paren_ ) \
+, BoostGenericDetailCallerConceptMap \
+>::construct()
+
+#define BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_AUTO( concept_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+piecewise_concept_maps_conditional_impl \
+< BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_in_paren_ ) \
+, type_stack< BOOST_GENERIC_DETAIL_REMOVE_PAREN( types_in_paren_ ) > \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( impl_name_in_paren_ ) \
+, BoostGenericDetailCallerConceptMap \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( condition_in_parem_ ) \
+>::construct()
+
+#define BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_AUTO_TYPE(concept_in_paren_\
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+decltype \
+( BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_AUTO( concept_in_paren_ \
+ , types_in_paren_ \
+ , condition_in_parem_ \
+ , impl_name_in_paren_ \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_TYPE( concept_in_paren_ \
+ , types_in_paren_ \
+ , impl_name_in_paren_ \
+ ) \
+decltype( BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS \
+ ( concept_in_paren_, types_in_paren_, impl_name_in_paren_ ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_TAG_OF( ... ) \
+BOOST_GENERIC_DETAIL_TAG_TYPE_OF( __VA_ARGS__ )()
+
+#define BOOST_GENERIC_DETAIL_TAG_TYPE_OF( ... ) \
+decltype \
+( boost_generic_detail_concept_maps_of \
+ ( ::boost_generic_detail::type_stack< __VA_ARGS__ >() \
+ , ::boost_generic_detail::map_index<>() \
+ ).tag() \
+)
+
+#define BOOST_GENERIC_DETAIL_NUM_CONCEPT_MAPS( ... ) \
+::boost::mpl::integral_c \
+< unsigned, BOOST_GENERIC_DETAIL_NUM_CONCEPT_MAPS_C( __VA_ARGS__ ) >
+
+#define BOOST_GENERIC_DETAIL_NUM_CONCEPT_MAPS_C( ... ) \
+::boost::mpl::identity \
+< decltype \
+ ( boost_generic_detail_concept_maps_of \
+ ( ::boost_generic_detail::type_stack< __VA_ARGS__ >() \
+ , ::boost_generic_detail::map_index<>() \
+ ).num_concept_maps() \
+ ) \
+>::type::value_c
+
+#define BOOST_GENERIC_DETAIL_NEXT_INDEX( ... ) \
+::boost::mpl::integral_c \
+< unsigned, BOOST_GENERIC_DETAIL_NEXT_INDEX_C( __VA_ARGS__ ) >
+
+#define BOOST_GENERIC_DETAIL_NEXT_INDEX_TYPE( ... ) \
+decltype \
+( boost_generic_detail_concept_maps_of \
+ ( ::boost_generic_detail::type_stack< __VA_ARGS__ >() \
+ , ::boost_generic_detail::map_index<>() \
+ ).next_index() \
+)
+
+#define BOOST_GENERIC_DETAIL_NEXT_INDEX_C( ... ) \
+::boost::mpl::identity \
+< BOOST_GENERIC_DETAIL_NEXT_INDEX_TYPE( __VA_ARGS__ ) >::type::value_c
+
+#endif // BOOST_GENERIC_DETAIL_PIECEWISE_CONCEPT_MAPS_HPP

Added: sandbox/generic/include/boost/generic/detail/pop_last_arg.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/pop_last_arg.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,7 @@
+#ifndef BOOST_GENERIC_DETAIL_POP_LAST_ARG_HPP
+#define BOOST_GENERIC_DETAIL_POP_LAST_ARG_HPP
+
+#define BOOST_GENERIC_DETAIL_POP_LAST_ARG( ... ) \
+
+
+#endif // BOOST_GENERIC_DETAIL_POP_LAST_ARG_HPP

Added: sandbox/generic/include/boost/generic/detail/preprocess_header_begin.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/preprocess_header_begin.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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).
+==============================================================================*/
+
+#include <boost/generic/detail/nary_cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#ifdef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#ifndef BOOST_GENERIC_PREPROCESSED_ROOT
+#error BOOST_GENERIC_PREPROCESSED_ROOT must be defined to be the proper directory when generating Boost.Generic preprocessed headers
+#endif
+
+#pragma wave option( output: push )
+#pragma wave option( line: push )
+#pragma wave option( line: 0 )
+#pragma wave option( output: BOOST_PP_STRINGIZE( BOOST_GENERIC_DETAIL_NARY_CAT( BOOST_GENERIC_PREPROCESSED_ROOT, eric/std_, BOOST_GENERIC_PREPROCESSED_HEADER_NAME, ei ) ) )
+
+#endif
+
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/detail/preprocess_header_end.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/preprocess_header_end.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,15 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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).
+==============================================================================*/
+
+#include <boost/preprocessor/cat.hpp>
+
+#ifdef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+BOOST_PP_CAT( #un, def BOOST_GENERIC_PREPROCESSED_HEADER_NAME )
+#pragma wave option( line: pop )
+#pragma wave option( output: pop )
+#endif

Added: sandbox/generic/include/boost/generic/detail/public_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/public_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,152 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_PUBLIC_DETS_HPP
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/seq_enum.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+
+// a public requirement is specified as:
+// public list, of, parents
+
+// Result is of the form:
+// (validity_bit)(is_partial_bit)((variadic)(seq)(of)(parents))
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLIC( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_IS_PUBLIC \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_INVALID \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_PUBLIC_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS wrapped_arg
+
+// expands to macro( validity_bit, name, empty_or_default_in_paren )
+// ToDo: pass error data as well for visitation
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_VISIT(dets, valid_macro, inv_macro) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_PUBLIC_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_PUBLIC_DETS_VISIT_IMPL_INVALID \
+ )( dets, valid_macro, invalid_macro )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_VISIT_IMPL_VALID( dets, valid_macro \
+ , inv_macro \
+ ) \
+valid_macro( BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENT_CONCEPT_SEQ( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_VISIT_IMPL_INVALID( dets \
+ , valid_macro \
+ , inv_macro \
+ ) \
+inv_macro( BOOST_GENERIC_DETAIL_PUBLIC_DETS_ERRORS( dets ) )
+
+// TODO allow a single less-refined concept specifier to not be parenthesized
+// TODO error if there are parts after the sequence
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_IS_PUBLIC( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT \
+ ( BOOST_GENERIC_DETAIL_EAT_PUBLIC( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_PARTIAL \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID \
+)( BOOST_GENERIC_DETAIL_EAT_PUBLIC( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENTS_SEQ( dets ) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+// Yields a comma-separated list of less-refined concept specifiers
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENTS( dets ) \
+BOOST_GENERIC_DETAIL_SEQ_ENUM \
+( BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENTS_SEQ( dets ) )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID_SEQ \
+, BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID_NO_SEQ \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID_SEQ( ... ) \
+(1) \
+(1) \
+(__VA_ARGS__)
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_VALID_NO_SEQ( ... ) \
+(1) \
+(1) \
+((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_PARTIAL( ... ) \
+(0) \
+(1) \
+((invalid_parent_concepts))
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_IMPL_INVALID( ... ) \
+(0) \
+(0) \
+((invalid_parent_concepts))
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLIC( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITOR( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLIC_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLIC_IMPL( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLIC \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_PUBLICpublic ,
+
+#define BOOST_GENERIC_DETAIL_EAT_PUBLIC( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_PUBLIC, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_PUBLICpublic
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_NATIVE_DECL( dets ) \
+: BOOST_GENERIC_DETAIL_PUBLIC_DETS_PARENTS( dets )
+
+#define BOOST_GENERIC_DETAIL_PUBLIC_DETS_NATIVE_DECL_STR( dets ) \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_PUBLIC_DETS_NATIVE_DECL( dets ) )
+
+#endif // BOOST_GENERIC_DETAIL_PUBLIC_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/remove_paren.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/remove_paren.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_REMOVE_PAREN_HPP
+#define BOOST_GENERIC_DETAIL_REMOVE_PAREN_HPP
+
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+
+#define BOOST_GENERIC_DETAIL_REMOVE_PAREN_IMPL( ... ) __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN_IMPL arg
+
+#define BOOST_GENERIC_DETAIL_REMOVE_PAREN_AND_EXTRA_DATA( ... ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) )
+
+#endif // BOOST_GENERIC_DETAIL_REMOVE_PAREN_HPP

Added: sandbox/generic/include/boost/generic/detail/requires_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/requires_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,135 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_REQUIRES_DETS_HPP
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_details.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/generic/detail/variadic_stringize.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+
+// a requires requirement is specified as:
+// requires concept_requirement
+
+// Result is of the form:
+// (validity_bit)(is_partial_bit)((concept_req))
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRES( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_IS_REQUIRES \
+, BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_INVALID \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_REQUIRES_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_REQUIRES_DETS wrapped_arg
+
+// expands to macro( validity_bit, name, empty_or_default_in_paren )
+// ToDo: pass error data as well for visitation
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_VISIT(dets, valid_macro, inv_macro) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_REQUIRES_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_REQUIRES_DETS_VISIT_IMPL_INVALID \
+ )( dets, valid_macro, invalid_macro )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_VISIT_IMPL_VALID( dets, valid_macro \
+ , inv_macro \
+ ) \
+valid_macro( BOOST_GENERIC_DETAIL_REQUIRES_DETS_PARENT_CONCEPT_SEQ( dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_VISIT_IMPL_INVALID( dets \
+ , valid_macro \
+ , inv_macro \
+ ) \
+inv_macro( BOOST_GENERIC_DETAIL_REQUIRES_DETS_ERRORS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_IS_REQUIRES( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT \
+ ( BOOST_GENERIC_DETAIL_EAT_REQUIRES( __VA_ARGS__ ) ) \
+ ) \
+ , BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_EAT_REQUIRES( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_PARTIAL \
+, BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_VALID \
+)( BOOST_GENERIC_DETAIL_EAT_REQUIRES( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_CONCEPT_REQ( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_VALID( ... ) \
+(1) \
+(1) \
+((__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_PARTIAL( ... ) \
+(0) \
+(1) \
+((invalid_concept_requirement))
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_IMPL_INVALID( ... ) \
+(0) \
+(0) \
+((invalid_concept_requirement))
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRES( ... ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITOR( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRES_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRES_IMPL( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRES \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_REQUIRESrequires ,
+
+#define BOOST_GENERIC_DETAIL_EAT_REQUIRES( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_REQUIRES, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_REQUIRESrequires
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_NATIVE_DECL( dets ) \
+requires BOOST_GENERIC_DETAIL_REQUIRES_DETS_CONCEPT_REQ( dets );
+
+#define BOOST_GENERIC_DETAIL_REQUIRES_DETS_NATIVE_DECL_STR( dets ) \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_REQUIRES_DETS_NATIVE_DECL( dets ) )
+
+#endif // BOOST_GENERIC_DETAIL_REQUIRES_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/rescan.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/rescan.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,21 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_RESCAN_HPP
+#define BOOST_GENERIC_DETAIL_RESCAN_HPP
+
+#include <boost/generic/detail/wrap.hpp>
+
+#define BOOST_GENERIC_DETAIL_SELF( ... ) __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_RESCAN_IMPL BOOST_GENERIC_DETAIL_WRAP( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_RESCAN_IMPL( ... ) __VA_ARGS__
+
+#endif // BOOST_GENERIC_DETAIL_RESCAN_HPP

Added: sandbox/generic/include/boost/generic/detail/seq_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/seq_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,103 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_SEQ_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_SEQ_DETAILS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/generic/detail/intercept.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Result format:
+// (is_valid)(starts_as_seq)((data_after_seq))(seq_size)(nonvar_seq)
+// Note: seq_size is the size of the sequence even if there is data after it
+#define BOOST_GENERIC_DETAIL_SEQ_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_NOT_PAREN \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_SEQ( dets ) \
+BOOST_PP_SEQ_ELEM( 4, dets )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITHOUT_EXTRA_DATA \
+BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITH_EXTRA_DATA( dets ) \
+BOOST_PP_BITAND( BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( dets ) \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( dets ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_EXTRA_DATA( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_SEQ_DETS_EXTRA_DATA( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_SIZE( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IS_EMPTY( dets ) \
+BOOST_PP_COMPL \
+( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( dets ) \
+ , BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( dets ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_NOT_PAREN( ... ) \
+(0)(0)((__VA_ARGS__))(0)(BOOST_PP_NIL)
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN_NO_EXTRA_DATA( ... ) \
+(1)(1)(()) \
+(BOOST_GENERIC_DETAIL_SEQ_SIZE(__VA_ARGS__)) \
+(BOOST_GENERIC_DETAIL_SEQ_TO_SEQ(__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN_EXTRA_DATA( ... ) \
+(0)(1) \
+((BOOST_GENERIC_DETAIL_SPLIT_DATA_FROM_NUM( __VA_ARGS__ ))) \
+(BOOST_GENERIC_DETAIL_SEQ_SIZE( __VA_ARGS__ )) \
+(BOOST_GENERIC_DETAIL_SEQ_TO_SEQ(__VA_ARGS__))
+
+#define BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_INTERCEPT \
+ ( BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL( __VA_ARGS__ ) ) \
+ ) \
+ ) \
+, BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN_NO_EXTRA_DATA \
+, BOOST_GENERIC_DETAIL_SEQ_DETS_IMPL_PAREN_EXTRA_DATA \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_SPLIT_DATA_FROM_NUM( ... ) \
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL( __VA_ARGS__ ) )
+
+#endif // BOOST_GENERIC_DETAIL_SEQ_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/seq_enum.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/seq_enum.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,277 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_SEQ_ENUM_HPP
+#define BOOST_GENERIC_DETAIL_SEQ_ENUM_HPP
+
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_GENERIC_DETAIL_SEQ_ENUM( variadic_seq ) \
+BOOST_PP_CAT \
+( BOOST_GENERIC_DETAIL_SENUM, BOOST_GENERIC_DETAIL_SEQ_SIZE( variadic_seq ) ) \
+variadic_seq
+
+#define BOOST_GENERIC_DETAIL_SENUM1( ... ) __VA_ARGS__
+#define BOOST_GENERIC_DETAIL_SENUM2( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM1
+#define BOOST_GENERIC_DETAIL_SENUM3( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM2
+#define BOOST_GENERIC_DETAIL_SENUM4( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM3
+#define BOOST_GENERIC_DETAIL_SENUM5( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM4
+#define BOOST_GENERIC_DETAIL_SENUM6( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM5
+#define BOOST_GENERIC_DETAIL_SENUM7( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM6
+#define BOOST_GENERIC_DETAIL_SENUM8( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM7
+#define BOOST_GENERIC_DETAIL_SENUM9( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM8
+#define BOOST_GENERIC_DETAIL_SENUM10( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM9
+#define BOOST_GENERIC_DETAIL_SENUM11( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM10
+#define BOOST_GENERIC_DETAIL_SENUM12( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM11
+#define BOOST_GENERIC_DETAIL_SENUM13( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM12
+#define BOOST_GENERIC_DETAIL_SENUM14( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM13
+#define BOOST_GENERIC_DETAIL_SENUM15( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM14
+#define BOOST_GENERIC_DETAIL_SENUM16( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM15
+#define BOOST_GENERIC_DETAIL_SENUM17( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM16
+#define BOOST_GENERIC_DETAIL_SENUM18( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM17
+#define BOOST_GENERIC_DETAIL_SENUM19( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM18
+#define BOOST_GENERIC_DETAIL_SENUM20( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM19
+#define BOOST_GENERIC_DETAIL_SENUM21( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM20
+#define BOOST_GENERIC_DETAIL_SENUM22( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM21
+#define BOOST_GENERIC_DETAIL_SENUM23( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM22
+#define BOOST_GENERIC_DETAIL_SENUM24( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM23
+#define BOOST_GENERIC_DETAIL_SENUM25( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM24
+#define BOOST_GENERIC_DETAIL_SENUM26( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM25
+#define BOOST_GENERIC_DETAIL_SENUM27( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM26
+#define BOOST_GENERIC_DETAIL_SENUM28( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM27
+#define BOOST_GENERIC_DETAIL_SENUM29( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM28
+#define BOOST_GENERIC_DETAIL_SENUM30( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM29
+#define BOOST_GENERIC_DETAIL_SENUM31( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM30
+#define BOOST_GENERIC_DETAIL_SENUM32( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM31
+#define BOOST_GENERIC_DETAIL_SENUM33( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM32
+#define BOOST_GENERIC_DETAIL_SENUM34( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM33
+#define BOOST_GENERIC_DETAIL_SENUM35( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM34
+#define BOOST_GENERIC_DETAIL_SENUM36( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM35
+#define BOOST_GENERIC_DETAIL_SENUM37( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM36
+#define BOOST_GENERIC_DETAIL_SENUM38( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM37
+#define BOOST_GENERIC_DETAIL_SENUM39( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM38
+#define BOOST_GENERIC_DETAIL_SENUM40( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM39
+#define BOOST_GENERIC_DETAIL_SENUM41( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM40
+#define BOOST_GENERIC_DETAIL_SENUM42( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM41
+#define BOOST_GENERIC_DETAIL_SENUM43( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM42
+#define BOOST_GENERIC_DETAIL_SENUM44( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM43
+#define BOOST_GENERIC_DETAIL_SENUM45( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM44
+#define BOOST_GENERIC_DETAIL_SENUM46( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM45
+#define BOOST_GENERIC_DETAIL_SENUM47( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM46
+#define BOOST_GENERIC_DETAIL_SENUM48( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM47
+#define BOOST_GENERIC_DETAIL_SENUM49( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM48
+#define BOOST_GENERIC_DETAIL_SENUM50( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM49
+#define BOOST_GENERIC_DETAIL_SENUM51( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM50
+#define BOOST_GENERIC_DETAIL_SENUM52( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM51
+#define BOOST_GENERIC_DETAIL_SENUM53( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM52
+#define BOOST_GENERIC_DETAIL_SENUM54( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM53
+#define BOOST_GENERIC_DETAIL_SENUM55( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM54
+#define BOOST_GENERIC_DETAIL_SENUM56( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM55
+#define BOOST_GENERIC_DETAIL_SENUM57( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM56
+#define BOOST_GENERIC_DETAIL_SENUM58( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM57
+#define BOOST_GENERIC_DETAIL_SENUM59( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM58
+#define BOOST_GENERIC_DETAIL_SENUM60( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM59
+#define BOOST_GENERIC_DETAIL_SENUM61( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM60
+#define BOOST_GENERIC_DETAIL_SENUM62( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM61
+#define BOOST_GENERIC_DETAIL_SENUM63( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM62
+#define BOOST_GENERIC_DETAIL_SENUM64( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM63
+#define BOOST_GENERIC_DETAIL_SENUM65( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM64
+#define BOOST_GENERIC_DETAIL_SENUM66( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM65
+#define BOOST_GENERIC_DETAIL_SENUM67( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM66
+#define BOOST_GENERIC_DETAIL_SENUM68( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM67
+#define BOOST_GENERIC_DETAIL_SENUM69( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM68
+#define BOOST_GENERIC_DETAIL_SENUM70( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM69
+#define BOOST_GENERIC_DETAIL_SENUM71( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM70
+#define BOOST_GENERIC_DETAIL_SENUM72( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM71
+#define BOOST_GENERIC_DETAIL_SENUM73( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM72
+#define BOOST_GENERIC_DETAIL_SENUM74( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM73
+#define BOOST_GENERIC_DETAIL_SENUM75( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM74
+#define BOOST_GENERIC_DETAIL_SENUM76( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM75
+#define BOOST_GENERIC_DETAIL_SENUM77( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM76
+#define BOOST_GENERIC_DETAIL_SENUM78( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM77
+#define BOOST_GENERIC_DETAIL_SENUM79( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM78
+#define BOOST_GENERIC_DETAIL_SENUM80( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM79
+#define BOOST_GENERIC_DETAIL_SENUM81( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM80
+#define BOOST_GENERIC_DETAIL_SENUM82( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM81
+#define BOOST_GENERIC_DETAIL_SENUM83( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM82
+#define BOOST_GENERIC_DETAIL_SENUM84( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM83
+#define BOOST_GENERIC_DETAIL_SENUM85( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM84
+#define BOOST_GENERIC_DETAIL_SENUM86( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM85
+#define BOOST_GENERIC_DETAIL_SENUM87( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM86
+#define BOOST_GENERIC_DETAIL_SENUM88( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM87
+#define BOOST_GENERIC_DETAIL_SENUM89( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM88
+#define BOOST_GENERIC_DETAIL_SENUM90( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM89
+#define BOOST_GENERIC_DETAIL_SENUM91( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM90
+#define BOOST_GENERIC_DETAIL_SENUM92( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM91
+#define BOOST_GENERIC_DETAIL_SENUM93( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM92
+#define BOOST_GENERIC_DETAIL_SENUM94( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM93
+#define BOOST_GENERIC_DETAIL_SENUM95( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM94
+#define BOOST_GENERIC_DETAIL_SENUM96( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM95
+#define BOOST_GENERIC_DETAIL_SENUM97( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM96
+#define BOOST_GENERIC_DETAIL_SENUM98( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM97
+#define BOOST_GENERIC_DETAIL_SENUM99( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM98
+#define BOOST_GENERIC_DETAIL_SENUM100( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM99
+#define BOOST_GENERIC_DETAIL_SENUM101( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM100
+#define BOOST_GENERIC_DETAIL_SENUM102( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM101
+#define BOOST_GENERIC_DETAIL_SENUM103( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM102
+#define BOOST_GENERIC_DETAIL_SENUM104( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM103
+#define BOOST_GENERIC_DETAIL_SENUM105( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM104
+#define BOOST_GENERIC_DETAIL_SENUM106( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM105
+#define BOOST_GENERIC_DETAIL_SENUM107( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM106
+#define BOOST_GENERIC_DETAIL_SENUM108( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM107
+#define BOOST_GENERIC_DETAIL_SENUM109( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM108
+#define BOOST_GENERIC_DETAIL_SENUM110( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM109
+#define BOOST_GENERIC_DETAIL_SENUM111( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM110
+#define BOOST_GENERIC_DETAIL_SENUM112( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM111
+#define BOOST_GENERIC_DETAIL_SENUM113( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM112
+#define BOOST_GENERIC_DETAIL_SENUM114( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM113
+#define BOOST_GENERIC_DETAIL_SENUM115( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM114
+#define BOOST_GENERIC_DETAIL_SENUM116( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM115
+#define BOOST_GENERIC_DETAIL_SENUM117( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM116
+#define BOOST_GENERIC_DETAIL_SENUM118( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM117
+#define BOOST_GENERIC_DETAIL_SENUM119( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM118
+#define BOOST_GENERIC_DETAIL_SENUM120( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM119
+#define BOOST_GENERIC_DETAIL_SENUM121( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM120
+#define BOOST_GENERIC_DETAIL_SENUM122( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM121
+#define BOOST_GENERIC_DETAIL_SENUM123( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM122
+#define BOOST_GENERIC_DETAIL_SENUM124( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM123
+#define BOOST_GENERIC_DETAIL_SENUM125( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM124
+#define BOOST_GENERIC_DETAIL_SENUM126( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM125
+#define BOOST_GENERIC_DETAIL_SENUM127( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM126
+#define BOOST_GENERIC_DETAIL_SENUM128( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM127
+#define BOOST_GENERIC_DETAIL_SENUM129( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM128
+#define BOOST_GENERIC_DETAIL_SENUM130( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM129
+#define BOOST_GENERIC_DETAIL_SENUM131( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM130
+#define BOOST_GENERIC_DETAIL_SENUM132( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM131
+#define BOOST_GENERIC_DETAIL_SENUM133( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM132
+#define BOOST_GENERIC_DETAIL_SENUM134( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM133
+#define BOOST_GENERIC_DETAIL_SENUM135( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM134
+#define BOOST_GENERIC_DETAIL_SENUM136( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM135
+#define BOOST_GENERIC_DETAIL_SENUM137( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM136
+#define BOOST_GENERIC_DETAIL_SENUM138( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM137
+#define BOOST_GENERIC_DETAIL_SENUM139( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM138
+#define BOOST_GENERIC_DETAIL_SENUM140( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM139
+#define BOOST_GENERIC_DETAIL_SENUM141( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM140
+#define BOOST_GENERIC_DETAIL_SENUM142( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM141
+#define BOOST_GENERIC_DETAIL_SENUM143( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM142
+#define BOOST_GENERIC_DETAIL_SENUM144( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM143
+#define BOOST_GENERIC_DETAIL_SENUM145( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM144
+#define BOOST_GENERIC_DETAIL_SENUM146( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM145
+#define BOOST_GENERIC_DETAIL_SENUM147( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM146
+#define BOOST_GENERIC_DETAIL_SENUM148( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM147
+#define BOOST_GENERIC_DETAIL_SENUM149( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM148
+#define BOOST_GENERIC_DETAIL_SENUM150( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM149
+#define BOOST_GENERIC_DETAIL_SENUM151( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM150
+#define BOOST_GENERIC_DETAIL_SENUM152( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM151
+#define BOOST_GENERIC_DETAIL_SENUM153( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM152
+#define BOOST_GENERIC_DETAIL_SENUM154( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM153
+#define BOOST_GENERIC_DETAIL_SENUM155( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM154
+#define BOOST_GENERIC_DETAIL_SENUM156( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM155
+#define BOOST_GENERIC_DETAIL_SENUM157( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM156
+#define BOOST_GENERIC_DETAIL_SENUM158( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM157
+#define BOOST_GENERIC_DETAIL_SENUM159( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM158
+#define BOOST_GENERIC_DETAIL_SENUM160( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM159
+#define BOOST_GENERIC_DETAIL_SENUM161( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM160
+#define BOOST_GENERIC_DETAIL_SENUM162( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM161
+#define BOOST_GENERIC_DETAIL_SENUM163( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM162
+#define BOOST_GENERIC_DETAIL_SENUM164( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM163
+#define BOOST_GENERIC_DETAIL_SENUM165( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM164
+#define BOOST_GENERIC_DETAIL_SENUM166( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM165
+#define BOOST_GENERIC_DETAIL_SENUM167( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM166
+#define BOOST_GENERIC_DETAIL_SENUM168( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM167
+#define BOOST_GENERIC_DETAIL_SENUM169( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM168
+#define BOOST_GENERIC_DETAIL_SENUM170( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM169
+#define BOOST_GENERIC_DETAIL_SENUM171( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM170
+#define BOOST_GENERIC_DETAIL_SENUM172( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM171
+#define BOOST_GENERIC_DETAIL_SENUM173( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM172
+#define BOOST_GENERIC_DETAIL_SENUM174( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM173
+#define BOOST_GENERIC_DETAIL_SENUM175( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM174
+#define BOOST_GENERIC_DETAIL_SENUM176( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM175
+#define BOOST_GENERIC_DETAIL_SENUM177( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM176
+#define BOOST_GENERIC_DETAIL_SENUM178( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM177
+#define BOOST_GENERIC_DETAIL_SENUM179( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM178
+#define BOOST_GENERIC_DETAIL_SENUM180( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM179
+#define BOOST_GENERIC_DETAIL_SENUM181( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM180
+#define BOOST_GENERIC_DETAIL_SENUM182( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM181
+#define BOOST_GENERIC_DETAIL_SENUM183( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM182
+#define BOOST_GENERIC_DETAIL_SENUM184( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM183
+#define BOOST_GENERIC_DETAIL_SENUM185( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM184
+#define BOOST_GENERIC_DETAIL_SENUM186( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM185
+#define BOOST_GENERIC_DETAIL_SENUM187( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM186
+#define BOOST_GENERIC_DETAIL_SENUM188( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM187
+#define BOOST_GENERIC_DETAIL_SENUM189( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM188
+#define BOOST_GENERIC_DETAIL_SENUM190( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM189
+#define BOOST_GENERIC_DETAIL_SENUM191( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM190
+#define BOOST_GENERIC_DETAIL_SENUM192( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM191
+#define BOOST_GENERIC_DETAIL_SENUM193( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM192
+#define BOOST_GENERIC_DETAIL_SENUM194( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM193
+#define BOOST_GENERIC_DETAIL_SENUM195( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM194
+#define BOOST_GENERIC_DETAIL_SENUM196( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM195
+#define BOOST_GENERIC_DETAIL_SENUM197( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM196
+#define BOOST_GENERIC_DETAIL_SENUM198( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM197
+#define BOOST_GENERIC_DETAIL_SENUM199( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM198
+#define BOOST_GENERIC_DETAIL_SENUM200( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM199
+#define BOOST_GENERIC_DETAIL_SENUM201( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM200
+#define BOOST_GENERIC_DETAIL_SENUM202( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM201
+#define BOOST_GENERIC_DETAIL_SENUM203( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM202
+#define BOOST_GENERIC_DETAIL_SENUM204( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM203
+#define BOOST_GENERIC_DETAIL_SENUM205( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM204
+#define BOOST_GENERIC_DETAIL_SENUM206( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM205
+#define BOOST_GENERIC_DETAIL_SENUM207( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM206
+#define BOOST_GENERIC_DETAIL_SENUM208( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM207
+#define BOOST_GENERIC_DETAIL_SENUM209( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM208
+#define BOOST_GENERIC_DETAIL_SENUM210( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM209
+#define BOOST_GENERIC_DETAIL_SENUM211( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM210
+#define BOOST_GENERIC_DETAIL_SENUM212( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM211
+#define BOOST_GENERIC_DETAIL_SENUM213( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM212
+#define BOOST_GENERIC_DETAIL_SENUM214( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM213
+#define BOOST_GENERIC_DETAIL_SENUM215( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM214
+#define BOOST_GENERIC_DETAIL_SENUM216( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM215
+#define BOOST_GENERIC_DETAIL_SENUM217( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM216
+#define BOOST_GENERIC_DETAIL_SENUM218( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM217
+#define BOOST_GENERIC_DETAIL_SENUM219( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM218
+#define BOOST_GENERIC_DETAIL_SENUM220( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM219
+#define BOOST_GENERIC_DETAIL_SENUM221( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM220
+#define BOOST_GENERIC_DETAIL_SENUM222( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM221
+#define BOOST_GENERIC_DETAIL_SENUM223( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM222
+#define BOOST_GENERIC_DETAIL_SENUM224( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM223
+#define BOOST_GENERIC_DETAIL_SENUM225( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM224
+#define BOOST_GENERIC_DETAIL_SENUM226( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM225
+#define BOOST_GENERIC_DETAIL_SENUM227( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM226
+#define BOOST_GENERIC_DETAIL_SENUM228( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM227
+#define BOOST_GENERIC_DETAIL_SENUM229( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM228
+#define BOOST_GENERIC_DETAIL_SENUM230( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM229
+#define BOOST_GENERIC_DETAIL_SENUM231( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM230
+#define BOOST_GENERIC_DETAIL_SENUM232( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM231
+#define BOOST_GENERIC_DETAIL_SENUM233( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM232
+#define BOOST_GENERIC_DETAIL_SENUM234( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM233
+#define BOOST_GENERIC_DETAIL_SENUM235( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM234
+#define BOOST_GENERIC_DETAIL_SENUM236( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM235
+#define BOOST_GENERIC_DETAIL_SENUM237( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM236
+#define BOOST_GENERIC_DETAIL_SENUM238( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM237
+#define BOOST_GENERIC_DETAIL_SENUM239( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM238
+#define BOOST_GENERIC_DETAIL_SENUM240( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM239
+#define BOOST_GENERIC_DETAIL_SENUM241( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM240
+#define BOOST_GENERIC_DETAIL_SENUM242( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM241
+#define BOOST_GENERIC_DETAIL_SENUM243( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM242
+#define BOOST_GENERIC_DETAIL_SENUM244( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM243
+#define BOOST_GENERIC_DETAIL_SENUM245( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM244
+#define BOOST_GENERIC_DETAIL_SENUM246( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM245
+#define BOOST_GENERIC_DETAIL_SENUM247( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM246
+#define BOOST_GENERIC_DETAIL_SENUM248( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM247
+#define BOOST_GENERIC_DETAIL_SENUM249( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM248
+#define BOOST_GENERIC_DETAIL_SENUM250( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM249
+#define BOOST_GENERIC_DETAIL_SENUM251( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM250
+#define BOOST_GENERIC_DETAIL_SENUM252( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM251
+#define BOOST_GENERIC_DETAIL_SENUM253( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM252
+#define BOOST_GENERIC_DETAIL_SENUM254( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM253
+#define BOOST_GENERIC_DETAIL_SENUM255( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM254
+#define BOOST_GENERIC_DETAIL_SENUM256( ... ) __VA_ARGS__, BOOST_GENERIC_DETAIL_SENUM255
+
+#endif // BOOST_GENERIC_DETAIL_SEQ_ENUM_HPP

Added: sandbox/generic/include/boost/generic/detail/seq_size.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/seq_size.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,553 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 2002, Matt Calabrese 2010.
+# * Distributed under 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)
+# * *
+# ************************************************************************** */
+
+// Note: This implementation is based on Paul Mensonides's seq_size, adapted to
+// work when top-level commas (or nothing) are present in an element
+
+#ifndef BOOST_GENERIC_DETAIL_SEQ_SIZE_HPP
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/config/config.hpp>
+
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL( __VA_ARGS__ ) )
+
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL(seq) BOOST_GENERIC_DETAIL_SEQ_SIZE_I((seq))
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_I(par) BOOST_GENERIC_DETAIL_SEQ_SIZE_II ## par
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_GENERIC_DETAIL_SEQ_SIZE_, BOOST_GENERIC_DETAIL_SEQ_SIZE_0 ## seq)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL(seq) BOOST_GENERIC_DETAIL_SEQ_SIZE_I(seq)
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_GENERIC_DETAIL_SEQ_SIZE_, BOOST_GENERIC_DETAIL_SEQ_SIZE_0 seq)
+# elif defined(__IBMC__) || defined(__IBMCPP__)
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL(seq) BOOST_PP_CAT(BOOST_GENERIC_DETAIL_SEQ_SIZE_, BOOST_PP_CAT(BOOST_GENERIC_DETAIL_SEQ_SIZE_0, seq))
+# else
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_IMPL(seq) BOOST_PP_CAT(BOOST_GENERIC_DETAIL_SEQ_SIZE_, BOOST_GENERIC_DETAIL_SEQ_SIZE_0 seq)
+# endif
+#
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_0(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_1
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_1(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_2
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_2(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_3
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_3(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_4
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_4(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_5
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_5(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_6
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_6(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_7
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_7(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_8
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_8(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_9
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_9(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_10
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_10(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_11
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_11(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_12
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_12(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_13
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_13(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_14
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_14(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_15
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_15(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_16
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_16(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_17
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_17(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_18
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_18(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_19
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_19(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_20
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_20(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_21
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_21(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_22
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_22(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_23
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_23(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_24
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_24(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_25
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_25(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_26
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_26(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_27
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_27(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_28
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_28(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_29
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_29(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_30
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_30(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_31
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_31(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_32
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_32(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_33
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_33(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_34
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_34(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_35
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_35(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_36
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_36(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_37
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_37(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_38
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_38(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_39
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_39(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_40
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_40(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_41
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_41(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_42
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_42(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_43
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_43(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_44
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_44(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_45
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_45(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_46
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_46(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_47
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_47(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_48
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_48(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_49
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_49(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_50
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_50(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_51
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_51(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_52
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_52(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_53
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_53(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_54
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_54(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_55
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_55(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_56
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_56(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_57
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_57(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_58
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_58(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_59
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_59(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_60
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_60(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_61
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_61(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_62
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_62(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_63
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_63(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_64
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_64(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_65
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_65(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_66
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_66(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_67
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_67(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_68
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_68(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_69
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_69(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_70
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_70(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_71
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_71(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_72
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_72(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_73
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_73(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_74
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_74(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_75
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_75(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_76
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_76(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_77
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_77(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_78
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_78(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_79
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_79(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_80
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_80(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_81
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_81(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_82
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_82(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_83
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_83(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_84
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_84(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_85
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_85(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_86
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_86(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_87
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_87(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_88
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_88(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_89
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_89(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_90
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_90(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_91
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_91(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_92
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_92(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_93
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_93(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_94
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_94(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_95
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_95(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_96
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_96(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_97
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_97(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_98
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_98(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_99
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_99(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_100
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_100(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_101
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_101(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_102
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_102(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_103
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_103(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_104
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_104(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_105
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_105(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_106
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_106(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_107
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_107(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_108
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_108(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_109
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_109(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_110
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_110(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_111
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_111(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_112
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_112(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_113
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_113(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_114
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_114(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_115
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_115(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_116
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_116(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_117
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_117(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_118
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_118(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_119
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_119(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_120
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_120(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_121
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_121(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_122
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_122(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_123
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_123(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_124
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_124(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_125
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_125(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_126
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_126(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_127
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_127(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_128
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_128(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_129
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_129(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_130
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_130(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_131
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_131(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_132
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_132(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_133
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_133(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_134
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_134(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_135
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_135(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_136
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_136(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_137
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_137(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_138
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_138(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_139
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_139(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_140
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_140(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_141
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_141(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_142
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_142(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_143
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_143(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_144
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_144(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_145
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_145(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_146
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_146(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_147
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_147(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_148
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_148(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_149
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_149(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_150
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_150(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_151
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_151(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_152
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_152(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_153
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_153(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_154
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_154(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_155
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_155(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_156
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_156(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_157
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_157(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_158
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_158(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_159
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_159(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_160
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_160(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_161
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_161(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_162
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_162(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_163
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_163(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_164
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_164(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_165
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_165(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_166
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_166(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_167
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_167(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_168
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_168(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_169
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_169(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_170
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_170(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_171
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_171(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_172
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_172(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_173
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_173(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_174
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_174(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_175
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_175(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_176
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_176(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_177
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_177(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_178
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_178(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_179
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_179(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_180
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_180(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_181
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_181(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_182
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_182(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_183
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_183(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_184
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_184(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_185
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_185(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_186
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_186(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_187
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_187(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_188
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_188(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_189
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_189(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_190
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_190(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_191
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_191(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_192
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_192(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_193
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_193(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_194
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_194(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_195
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_195(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_196
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_196(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_197
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_197(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_198
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_198(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_199
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_199(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_200
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_200(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_201
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_201(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_202
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_202(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_203
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_203(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_204
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_204(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_205
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_205(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_206
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_206(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_207
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_207(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_208
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_208(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_209
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_209(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_210
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_210(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_211
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_211(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_212
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_212(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_213
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_213(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_214
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_214(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_215
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_215(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_216
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_216(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_217
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_217(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_218
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_218(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_219
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_219(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_220
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_220(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_221
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_221(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_222
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_222(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_223
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_223(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_224
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_224(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_225
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_225(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_226
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_226(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_227
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_227(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_228
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_228(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_229
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_229(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_230
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_230(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_231
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_231(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_232
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_232(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_233
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_233(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_234
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_234(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_235
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_235(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_236
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_236(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_237
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_237(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_238
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_238(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_239
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_239(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_240
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_240(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_241
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_241(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_242
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_242(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_243
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_243(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_244
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_244(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_245
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_245(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_246
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_246(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_247
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_247(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_248
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_248(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_249
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_249(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_250
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_250(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_251
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_251(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_252
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_252(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_253
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_253(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_254
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_254(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_255
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_255(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_256
+#define BOOST_GENERIC_DETAIL_SEQ_SIZE_256(...) BOOST_GENERIC_DETAIL_SEQ_SIZE_257
+#
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_0 0,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_1 1,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_2 2,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_3 3,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_4 4,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_5 5,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_6 6,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_7 7,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_8 8,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_9 9,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_10 10,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_11 11,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_12 12,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_13 13,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_14 14,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_15 15,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_16 16,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_17 17,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_18 18,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_19 19,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_20 20,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_21 21,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_22 22,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_23 23,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_24 24,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_25 25,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_26 26,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_27 27,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_28 28,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_29 29,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_30 30,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_31 31,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_32 32,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_33 33,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_34 34,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_35 35,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_36 36,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_37 37,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_38 38,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_39 39,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_40 40,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_41 41,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_42 42,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_43 43,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_44 44,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_45 45,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_46 46,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_47 47,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_48 48,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_49 49,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_50 50,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_51 51,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_52 52,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_53 53,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_54 54,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_55 55,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_56 56,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_57 57,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_58 58,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_59 59,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_60 60,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_61 61,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_62 62,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_63 63,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_64 64,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_65 65,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_66 66,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_67 67,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_68 68,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_69 69,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_70 70,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_71 71,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_72 72,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_73 73,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_74 74,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_75 75,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_76 76,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_77 77,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_78 78,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_79 79,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_80 80,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_81 81,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_82 82,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_83 83,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_84 84,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_85 85,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_86 86,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_87 87,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_88 88,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_89 89,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_90 90,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_91 91,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_92 92,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_93 93,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_94 94,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_95 95,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_96 96,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_97 97,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_98 98,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_99 99,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_100 100,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_101 101,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_102 102,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_103 103,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_104 104,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_105 105,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_106 106,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_107 107,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_108 108,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_109 109,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_110 110,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_111 111,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_112 112,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_113 113,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_114 114,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_115 115,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_116 116,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_117 117,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_118 118,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_119 119,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_120 120,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_121 121,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_122 122,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_123 123,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_124 124,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_125 125,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_126 126,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_127 127,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_128 128,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_129 129,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_130 130,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_131 131,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_132 132,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_133 133,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_134 134,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_135 135,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_136 136,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_137 137,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_138 138,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_139 139,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_140 140,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_141 141,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_142 142,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_143 143,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_144 144,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_145 145,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_146 146,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_147 147,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_148 148,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_149 149,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_150 150,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_151 151,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_152 152,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_153 153,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_154 154,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_155 155,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_156 156,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_157 157,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_158 158,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_159 159,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_160 160,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_161 161,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_162 162,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_163 163,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_164 164,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_165 165,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_166 166,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_167 167,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_168 168,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_169 169,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_170 170,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_171 171,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_172 172,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_173 173,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_174 174,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_175 175,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_176 176,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_177 177,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_178 178,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_179 179,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_180 180,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_181 181,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_182 182,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_183 183,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_184 184,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_185 185,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_186 186,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_187 187,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_188 188,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_189 189,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_190 190,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_191 191,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_192 192,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_193 193,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_194 194,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_195 195,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_196 196,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_197 197,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_198 198,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_199 199,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_200 200,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_201 201,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_202 202,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_203 203,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_204 204,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_205 205,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_206 206,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_207 207,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_208 208,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_209 209,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_210 210,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_211 211,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_212 212,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_213 213,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_214 214,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_215 215,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_216 216,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_217 217,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_218 218,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_219 219,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_220 220,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_221 221,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_222 222,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_223 223,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_224 224,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_225 225,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_226 226,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_227 227,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_228 228,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_229 229,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_230 230,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_231 231,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_232 232,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_233 233,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_234 234,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_235 235,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_236 236,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_237 237,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_238 238,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_239 239,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_240 240,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_241 241,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_242 242,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_243 243,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_244 244,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_245 245,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_246 246,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_247 247,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_248 248,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_249 249,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_250 250,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_251 251,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_252 252,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_253 253,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_254 254,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_255 255,
+# define BOOST_GENERIC_DETAIL_SEQ_SIZE_BOOST_GENERIC_DETAIL_SEQ_SIZE_256 256,
+
+#endif // BOOST_GENERIC_DETAIL_SEQ_SIZE_HPP

Added: sandbox/generic/include/boost/generic/detail/seq_to_seq.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/seq_to_seq.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,538 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_HPP
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// Ignores any data after the sequence if such data exists
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( variadic_seq ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN \
+( BOOST_PP_CAT( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_ \
+ , BOOST_GENERIC_DETAIL_SEQ_SIZE( variadic_seq ) \
+ ) variadic_seq \
+)
+
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_1( ... ) \
+((__VA_ARGS__)),
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_2( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_1
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_3( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_2
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_4( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_3
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_5( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_4
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_6( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_5
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_7( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_6
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_8( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_7
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_9( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_8
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_10( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_9
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_11( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_10
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_12( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_11
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_13( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_12
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_14( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_13
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_15( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_14
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_16( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_15
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_17( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_16
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_18( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_17
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_19( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_18
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_20( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_19
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_21( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_20
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_22( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_21
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_23( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_22
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_24( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_23
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_25( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_24
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_26( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_25
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_27( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_26
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_28( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_27
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_29( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_28
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_30( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_29
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_31( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_30
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_32( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_31
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_33( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_32
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_34( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_33
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_35( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_34
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_36( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_35
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_37( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_36
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_38( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_37
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_39( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_38
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_40( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_39
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_41( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_40
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_42( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_41
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_43( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_42
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_44( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_43
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_45( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_44
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_46( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_45
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_47( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_46
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_48( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_47
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_49( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_48
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_50( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_49
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_51( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_50
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_52( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_51
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_53( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_52
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_54( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_53
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_55( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_54
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_56( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_55
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_57( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_56
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_58( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_57
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_59( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_58
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_60( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_59
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_61( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_60
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_62( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_61
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_63( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_62
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_64( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_63
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_65( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_64
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_66( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_65
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_67( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_66
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_68( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_67
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_69( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_68
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_70( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_69
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_71( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_70
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_72( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_71
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_73( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_72
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_74( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_73
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_75( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_74
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_76( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_75
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_77( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_76
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_78( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_77
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_79( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_78
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_80( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_79
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_81( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_80
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_82( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_81
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_83( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_82
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_84( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_83
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_85( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_84
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_86( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_85
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_87( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_86
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_88( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_87
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_89( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_88
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_90( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_89
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_91( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_90
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_92( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_91
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_93( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_92
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_94( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_93
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_95( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_94
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_96( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_95
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_97( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_96
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_98( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_97
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_99( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_98
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_100( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_99
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_101( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_100
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_102( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_101
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_103( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_102
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_104( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_103
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_105( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_104
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_106( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_105
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_107( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_106
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_108( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_107
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_109( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_108
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_110( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_109
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_111( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_110
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_112( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_111
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_113( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_112
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_114( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_113
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_115( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_114
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_116( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_115
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_117( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_116
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_118( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_117
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_119( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_118
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_120( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_119
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_121( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_120
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_122( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_121
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_123( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_122
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_124( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_123
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_125( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_124
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_126( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_125
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_127( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_126
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_128( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_127
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_129( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_128
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_130( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_129
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_131( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_130
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_132( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_131
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_133( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_132
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_134( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_133
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_135( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_134
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_136( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_135
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_137( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_136
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_138( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_137
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_139( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_138
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_140( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_139
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_141( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_140
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_142( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_141
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_143( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_142
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_144( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_143
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_145( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_144
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_146( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_145
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_147( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_146
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_148( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_147
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_149( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_148
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_150( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_149
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_151( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_150
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_152( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_151
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_153( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_152
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_154( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_153
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_155( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_154
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_156( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_155
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_157( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_156
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_158( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_157
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_159( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_158
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_160( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_159
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_161( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_160
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_162( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_161
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_163( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_162
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_164( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_163
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_165( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_164
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_166( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_165
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_167( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_166
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_168( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_167
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_169( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_168
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_170( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_169
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_171( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_170
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_172( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_171
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_173( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_172
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_174( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_173
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_175( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_174
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_176( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_175
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_177( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_176
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_178( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_177
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_179( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_178
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_180( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_179
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_181( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_180
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_182( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_181
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_183( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_182
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_184( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_183
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_185( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_184
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_186( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_185
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_187( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_186
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_188( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_187
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_189( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_188
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_190( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_189
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_191( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_190
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_192( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_191
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_193( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_192
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_194( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_193
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_195( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_194
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_196( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_195
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_197( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_196
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_198( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_197
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_199( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_198
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_200( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_199
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_201( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_200
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_202( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_201
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_203( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_202
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_204( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_203
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_205( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_204
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_206( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_205
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_207( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_206
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_208( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_207
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_209( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_208
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_210( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_209
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_211( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_210
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_212( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_211
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_213( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_212
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_214( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_213
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_215( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_214
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_216( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_215
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_217( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_216
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_218( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_217
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_219( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_218
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_220( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_219
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_221( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_220
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_222( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_221
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_223( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_222
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_224( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_223
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_225( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_224
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_226( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_225
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_227( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_226
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_228( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_227
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_229( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_228
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_230( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_229
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_231( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_230
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_232( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_231
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_233( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_232
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_234( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_233
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_235( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_234
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_236( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_235
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_237( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_236
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_238( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_237
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_239( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_238
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_240( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_239
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_241( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_240
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_242( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_241
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_243( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_242
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_244( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_243
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_245( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_244
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_246( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_245
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_247( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_246
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_248( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_247
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_249( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_248
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_250( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_249
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_251( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_250
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_252( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_251
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_253( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_252
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_254( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_253
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_255( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_254
+#define BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_256( ... ) \
+((__VA_ARGS__)) BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_255
+
+
+#endif // BOOST_GENERIC_DETAIL_SEQ_TO_SEQ_HPP

Added: sandbox/generic/include/boost/generic/detail/sfinae_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/sfinae_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,272 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_SFINAE_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITOR_HPP
+
+#include <boost/generic/detail/always_void.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class Tag, unsigned Index >
+struct unknown_type {};
+
+} } }
+
+#define BOOST_GENERIC_DETAIL_SFINAE_STRUCT( param_index, param_dets, ... ) \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ , class ConceptMap, class Enabler = void \
+ > \
+struct BOOST_PP_CAT( is_valid_param, param_index ) \
+ : ::boost::mpl::false_ {}; \
+ \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) \
+ , class ConceptMap \
+ > \
+struct BOOST_PP_CAT( is_valid_param, param_index ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( param_dets ) \
+ , ConceptMap \
+ , typename ::boost::generic::detail::always_void< __VA_ARGS__ >::type \
+ > \
+ : boost::mpl::true_ {};
+
+#define BOOST_GENERIC_DETAIL_ENABLE_IF_STRUCT( param_index, param_dets, ... ) \
+BOOST_GENERIC_DETAIL_SFINAE_STRUCT \
+( param_index, param_dets, typename ::boost::enable_if< __VA_ARGS__ >::type )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORaxiom( arg )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORrequires( arg ) \
+BOOST_GENERIC_DETAIL_ENABLE_IF_STRUCT \
+( decltype( boost_generic_detail_validity_checker \
+ ( ::boost::generic::detail::type_< arg >() ) \
+ ) \
+)
+
+struct deducers
+{
+ struct result_type {};
+ struct other_stuff {};
+
+ template< class result_type >
+ static ::boost::mpl::identity< result_type >
+ deduce_result_type( std::pair< int, result_type > );
+};
+
+struct deduce_result_type
+ : types_base
+{
+template< class result_type >
+boost::mpl::identity< result_type >
+deduce( pair< int, result_type >
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORtypename( name, default_ ) \
+template< class ConceptMap, class Enabler = void > \
+struct BOOST_PP_CAT( has_typename_, name ) : ::boost::mpl::false_ {}; \
+ \
+template< class ConceptMap > \
+struct BOOST_PP_CAT( has_typename_, name ) \
+ < ConceptMap \
+ , typename ::boost::generic::detail::always_void \
+ < typename ConceptMap::name >::type \
+ > : ::boost::mpl::true_ {}; \
+ \
+template< class ConceptMap > \
+struct BOOST_PP_CAT( get_typename_, name ) \
+{ \
+ typedef typename ConceptMap::name type; \
+}; \
+ \
+typedef typename ::boost::mpl::eval_if \
+ < BOOST_PP_CAT( has_typename_, name )< ConceptMap > \
+ , BOOST_PP_CAT( get_typename_, name )< ConceptMap > \
+ , ::boost::mpl::identity< ::boost::generic::detail::unknown_type > \
+ >::type BOOST_PP_CAT( boost_generic_detail_typename_first_pass, name );\
+ \
+BOOST_GENERIC_DETAIL_SFINAE_STRUCT(
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORconstrained_typename( \
+ constraint\
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( constraint ) \
+name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORmember_typename( this_type \
+ , name \
+ , default_ \
+ ) \
+typename BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORconstrained_member_typename(\
+ constraint\
+ , this_type \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( constraint ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::name BOOST_GENERIC_DETAIL_EQ_DEFAULT_OR_EMPTY( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORfunction( return_type, name\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+name( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORmember_function( \
+ return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::name( \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORstatic_member_function( \
+ return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+static \
+BOOST_GENERIC_DETAIL_SFINAE_VISITORmember_function \
+( return_type, this_type, name, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR( \
+ return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITORfunction \
+( return_type, operator operator_, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORprefix_unary_operator \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORbinary_operator \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORcall_operator( return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR \
+( return_type, (), param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORcomma_operator( return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( return_type ) operator , \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORarrow_operator( return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR \
+( return_type, ->, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORsubscript_operator( return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_BASIC_OPERATOR \
+( return_type, [], param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITOR_MEMBER_OPERATOR( \
+ return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITORmember_function \
+( return_type, this_type, operator operator_, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORassign_operator( \
+ return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_MEMBER_OPERATOR \
+( return_type, this_type, =, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORallocation_operator \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORdeallocation_operator \
+BOOST_GENERIC_DETAIL_SFINAE_VISITOR_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORconstructor( this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type ) \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORexplicit_constructor( \
+ this_type \
+ , param_dets\
+ , default_ \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_SFINAE_VISITORconstructor \
+( this_type, param_dets, default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORdestructor( this_type \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( this_type )::~BOOST_GENERIC_DETAIL_REMOVE_PAREN( this_type )() \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORconversion( target_type \
+ , param_dets \
+ , default_ \
+ ) \
+operator BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( target_type )( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS( param_dets ) )\
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART( param_dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( default_ )
+
+#define BOOST_GENERIC_DETAIL_SFINAE_VISITORexplicit_conversion( \
+ target_type\
+ , param_dets \
+ , default_ \
+ ) \
+explicit \
+BOOST_GENERIC_DETAIL_SFINAE_VISITORconversion \
+( target_type, param_dets, default_ )
+
+#endif // BOOST_GENERIC_DETAIL_SFINAE_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/simplify_variadic_param_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/simplify_variadic_param_list.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,148 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_DETAIL_SIMPLIFY_VARIADIC_PARAM_LIST_HPP
+#define BOOST_GENERIC_DETAIL_SIMPLIFY_VARIADIC_PARAM_LIST_HPP
+
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/greater.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/expand.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/array/elem.hpp>
+#include <boost/preprocessor/array/enum.hpp>
+#include <boost/preprocessor/array/remove.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/transform.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/tuple/size.hpp>
+#include <boost/preprocessor/variadic/elem.hpp>
+#include <boost/preprocessor/variadic/size.hpp>
+#include <boost/preprocessor/variadic/to_seq.hpp>
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC( ... ) \
+BOOST_PP_SEQ_ENUM \
+( BOOST_PP_SEQ_TRANSFORM \
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_MAC, ~ \
+ , BOOST_PP_VARIADIC_TO_SEQ( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_IS_VARIADIC( param ) \
+BOOST_PP_SEQ_ELEM( 0, param )
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_DDD_IF_VARIADIC( param ) \
+BOOST_PP_EXPR_IIF \
+( BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_IS_VARIADIC( param ) \
+, ... \
+)
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_NAME( param ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( BOOST_PP_SEQ_ELEM( 1, param ) ) )
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND( param ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_IS_VARIADIC( param ) \
+, BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_VARIADIC \
+, BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_NAME \
+)( param )
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_VARIADIC( param ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_KIND_NAME( param )...
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_NAME( param ) \
+BOOST_PP_EXPAND( BOOST_GENERIC_DETAIL_EAT BOOST_PP_SEQ_ELEM( 1, param ) )
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_PASS_ARG( param ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_IS_VARIADIC( param ) \
+, BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_PASS_ARG_VARIADIC \
+, BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_NAME \
+)( param )
+
+#define BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_PASS_ARG_VARIADIC( param ) \
+BOOST_GENERIC_DETAIL_SIMPLIFIED_PARAM_NAME( param )...
+
+// This macro is only called if there are at least 3 commas
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_MAY( \
+ param_size \
+ , wrapped_param\
+ , name ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITAND \
+ ( BOOST_PP_BITAND \
+ ( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ (BOOST_PP_ARRAY_ELEM \
+ (BOOST_PP_DEC(param_size),(param_size,wrapped_param))) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ (BOOST_PP_ARRAY_ELEM \
+ (BOOST_PP_DEC(BOOST_PP_DEC(param_size)),(param_size,wrapped_param))) \
+ ) \
+ , BOOST_GENERIC_DETAIL_IS_EMPTY \
+ (BOOST_PP_ARRAY_ELEM \
+ (BOOST_PP_DEC \
+ (BOOST_PP_DEC(BOOST_PP_DEC(param_size))),(param_size,wrapped_param))) \
+ ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_YES \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_NO \
+)( param_size, wrapped_param, name )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_YES( \
+ param_size \
+ , wrapped_param\
+ , name ) \
+( 1 ) \
+( ( BOOST_PP_ARRAY_ENUM \
+ ( BOOST_PP_ARRAY_REMOVE \
+ ( BOOST_PP_ARRAY_REMOVE \
+ ( BOOST_PP_ARRAY_REMOVE \
+ ( (param_size,wrapped_param), BOOST_PP_DEC( param_size ) ) \
+ , BOOST_PP_DEC( BOOST_PP_DEC( param_size ) ) \
+ ) \
+ , BOOST_PP_DEC( BOOST_PP_DEC( BOOST_PP_DEC( param_size ) ) ) \
+ ) \
+ ) \
+ ) \
+ name \
+)
+
+// This is only called when the param is not variadic
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_NO( \
+ param_size \
+ , wrapped_param\
+ , name ) \
+( 0 ) ( wrapped_param name )
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_MAC(s,d,elem)\
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL \
+( BOOST_PP_TUPLE_SIZE \
+ ( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( elem ) ) \
+, BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( elem ) \
+, BOOST_PP_EXPAND( BOOST_GENERIC_DETAIL_EAT elem ) \
+)
+
+#define BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL( \
+ param_size \
+ , wrapped_param\
+ , name ) \
+BOOST_PP_IIF \
+( BOOST_PP_GREATER( param_size, 3 ) \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_MAY \
+, BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_SIMPLIFY_VARIADIC_IMPL_NO \
+)( param_size, wrapped_param, name )
+
+#endif // BOOST_GENERIC_DETAIL_SIMPLIFY_VARIADIC_PARAM_LIST_HPP

Added: sandbox/generic/include/boost/generic/detail/split_param_id_and_param.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/split_param_id_and_param.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,134 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_HPP
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/config.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_DETAIL_EAT_FOR_for
+
+#define BOOST_GENERIC_DETAIL_EAT_IF_if
+
+// Macros that combine "for" with its secondary param ID and separates
+// the param ID from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_FOR_PARAM_ID_AND_PARAM_typedef for_typedef,
+
+// Macros that combine "if" with its secondary param ID and separates
+// the param ID from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_IF_PARAM_ID_AND_PARAM_not if_not,
+#define BOOST_GENERIC_DETAIL_SPLIT_IF_PARAM_ID_AND_PARAM_typedef if_typedef,
+
+// Macros that separate 1 word param IDs from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_try try,
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_typename typename,
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_public public,
+
+// Macros that determine if "for" is the first word of a param ID
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_for 1,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_if 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_try 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_typename 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_public 0,
+
+// Macros that determine if "if" is the first word of a param ID
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_for 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_if 1,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_try 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_typename 0,
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_public 0,
+
+// Implementation for exactly for and exactly if
+#define BOOST_GENERIC_DETAIL_FOR_COMMA_for for,
+#define BOOST_GENERIC_DETAIL_IF_COMMA_if if,
+
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_EXACTLY_IF_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_IF_COMMA_ ## __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_EXACTLY_FOR_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_FOR_COMMA_ ## __VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_NOT_EXACTLY_FOR_IMPL(...)\
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_SPLIT_FOR_PARAM_ID_AND_PARAM_ \
+, BOOST_GENERIC_DETAIL_EAT_FOR_ ## __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_NOT_EXACTLY_IF_IMPL(...) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_SPLIT_IF_PARAM_ID_AND_PARAM_ \
+, BOOST_GENERIC_DETAIL_EAT_IF_ ## __VA_ARGS__ \
+)
+
+// Combines "for" with the secondary param ID and separates the full ID
+// from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_FOR_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_EAT_FOR_ ## __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_EXACTLY_FOR_IMPL \
+, BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_NOT_EXACTLY_FOR_IMPL \
+)( __VA_ARGS__ )
+
+// Combines "if" with the secondary param ID and separates the full ID
+// from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_IF_IMPL(...) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_EAT_IF_ ## __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_EXACTLY_IF_IMPL \
+, BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_NOT_EXACTLY_IF_IMPL \
+)( __VA_ARGS__ )
+
+// Yields 1 if the parameter id starts with "for"
+// otherwise yields 0
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR_ \
+ , __VA_ARGS__ \
+ ) \
+)
+
+// Yields 1 if the parameter id starts with "virtual"
+// otherwise yields 0
+#define BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF( ... ) \
+BOOST_GENERIC_DETAIL_HEAD_ARGUMENT_AFTER_RESCAN \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF_ \
+ , __VA_ARGS__ \
+ ) \
+)
+
+// Separates a param id from the parameter by a comma
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_ONE_WORD_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_ ## __VA_ARGS__
+
+// Separates a param id from the parameter by a comma
+// If the parameter ID is multiple words, it combines them and replaces spaces
+// with underscores
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM( arg_in_paren ) \
+BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_IMPL arg_in_paren
+
+#define BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_PARAM_ID_HAS_FOR( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_FOR_IMPL \
+, BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_PARAM_ID_HAS_IF( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_IF_IMPL \
+ , BOOST_GENERIC_DETAIL_SPLIT_PARAM_ID_AND_PARAM_ONE_WORD_IMPL \
+ ) \
+)( __VA_ARGS__ BOOST_GENERIC_DETAIL_VARIADIC_EMPTY )
+
+#endif //BOOST_GENERIC_DETAIL_SPLIT_SPLIT_PARAM_ID_AND_PARAM_AND_PARAM_HPP

Added: sandbox/generic/include/boost/generic/detail/starts_empty_or_parenthesized.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/starts_empty_or_parenthesized.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+#ifndef BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED_HPP
+#define BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+
+#define BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( ... ) \
+BOOST_PP_BITOR( BOOST_GENERIC_DETAIL_STARTS_EMPTY( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ )
+
+#endif // BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED_HPP

Added: sandbox/generic/include/boost/generic/detail/static_assert_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/static_assert_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,173 @@
+#ifndef BOOST_GENERIC_DETAIL_STATIC_ASSERT_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERT_VISITOR_HPP
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_not_same.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTaxiom( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTrequires( i, d, arg ) \
+BOOST_GENERIC_ASSERT( BOOST_GENERIC_DETAIL_REMOVE_PAREN( arg ) );
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTtypename( i, d, name, default_ ) \
+typedef typename BOOST_GENERIC_DETAIL_REMOVE_PAREN( d )::name name; \
+static_assert \
+( ::boost::generic::detail::is_not_same \
+ < name, ::boost::generic::detail::no_deduction >::value \
+, "typename '" BOOST_PP_STRINGIZE( name ) \
+ "' was not explicitly satisfied and cannot be deduced." \
+); \
+static_assert \
+( ::boost::generic::detail::is_not_same \
+ < name, ::boost::generic::detail::ambiguous_deduction >::value \
+, "typename '" BOOST_PP_STRINGIZE( name ) \
+ "' was not explicitly satisfied and deduction results in ambiguity." \
+);
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTconstrained_typename( i, d \
+ , constraint\
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_STATIC_ASSERTtypename( i, d, name, default_ ) \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT \
+( BOOST_GENERIC_DETAIL_REMOVE_PAREN( constraint )< name > );
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTmember_typename( i, d \
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTfunction( i, d, return_type \
+ , name, param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTmember_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERT_BASIC_OPERATOR( \
+ i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTprefix_unary_operator \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTbinary_operator \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTcomma_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTarrow_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTsubscript_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERT_MEMBER_OPERATOR( \
+ i, d \
+ , return_type\
+ , this_type \
+ , operator_ \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTallocation_operator \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTdeallocation_operator \
+BOOST_GENERIC_DETAIL_STATIC_ASSERT_MEMBER_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTdestructor( i, d, this_type\
+ , default_ \
+ )
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTconversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_STATIC_ASSERTexplicit_conversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ )
+
+#endif // BOOST_GENERIC_DETAIL_STATIC_ASSERT_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/std_concept_preprocessing_utilities.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_concept_preprocessing_utilities.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,51 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_DETAIL_STD_CONCEPT_PREPROCESSING_UTILITIES_HPP
+#define BOOST_GENERIC_DETAIL_STD_CONCEPT_PREPROCESSING_UTILITIES_HPP
+
+#include <boost/generic/detail/nary_cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#ifdef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER \
+<boost/generic/detail/preprocess_concepts_error.hpp>
+
+#define BOOST_GENERIC_CREATE_LINE_DIRECTIVE( line_num ) #line line_num \
+BOOST_PP_STRINGIZE \
+BOOST_PP_EMPTY() \
+( BOOST_GENERIC_DETAIL_NARY_CAT \
+ BOOST_PP_EMPTY() \
+ ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ \
+ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp \
+ ) \
+)
+
+#else
+
+#ifndef BOOST_GENERIC_USE_NATIVE_CONCEPTS
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( <boost/generic/std_, BOOST_GENERIC_PREPROCESSED_HEADER_NAME, ei > )
+
+#else
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( <boost/generic/std_, BOOST_GENERIC_PREPROCESSED_HEADER_NAME, ni > )
+
+#endif
+
+#define BOOST_GENERIC_CREATE_LINE_DIRECTIVE( dummy_param )
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_STD_CONCEPT_PREPROCESSING_UTILITIES_HPP

Added: sandbox/generic/include/boost/generic/detail/std_forward_decl.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_forward_decl.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,53 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_HPP
+#define BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_HPP
+
+#include <boost/generic/config/std_lib.hpp>
+
+#if BOOST_GENERIC_STD_LIB_IS_SUPPORTED()
+
+#include <boost/generic/detail/nary_cat.hpp>
+
+// Yields a header file to include to ge a forward declaration of name
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( name ) \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+(<boost/generic/detail/std_forward_decl/_,BOOST_GENERIC_STD_LIB,_/_,name,_.hpp>)
+
+// Yields the Boost.Generic style template parameter list for name
+// Requires that the corresponding forward declaration header is included first
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( name ) \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( BOOST_GENERIC_DETAIL_STD_FWD_DECL_PARAMS_, BOOST_GENERIC_STD_LIB, _, name )()
+
+// Yields the type name for name given the above parameter list
+// Requires that the corresponding forward declaration header is included first
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( name ) \
+BOOST_GENERIC_DETAIL_NARY_CAT \
+( BOOST_GENERIC_DETAIL_STD_FWD_DECL_NAME_, BOOST_GENERIC_STD_LIB, _, name )()
+
+#else
+
+// ToDo: Come up with better definitions for these
+
+// Yields a header file to include to ge a forward declaration of name
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( name ) \
+<boost/generic/detail/empty_file.hpp>
+
+// Yields the Boost.Generic style template parameter list for name
+// Requires that the corresponding forward declaration header is included first
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( name )
+
+// Yields the type name for name given the above parameter list
+// Requires that the corresponding forward declaration header is included first
+#define BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( name )
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_HPP

Added: sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_array_iterator_.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_array_iterator_.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_ARRAY_ITERATOR_HPP
+#define BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_ARRAY_ITERATOR_HPP
+
+namespace __gnu_cxx {
+
+// std::array iterators
+template< typename _Iterator, typename _Container >
+class __normal_iterator;
+
+}
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_PARAMS_libstdcpp_array_iterator() \
+( template ( ( typename ) _Iterator, ( typename ) _Container ) )
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_NAME_libstdcpp_array_iterator() \
+::__gnu_cxx::__normal_iterator< _Iterator, _Container >
+
+#endif // BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_ARRAY_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_deque_iterator_.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_deque_iterator_.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_DEQUE_ITERATOR_HPP
+#define BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_DEQUE_ITERATOR_HPP
+
+namespace _GLIBCXX_STD_D {
+
+// std::deque iterators
+template< typename _Tp, typename _Ref, typename _Ptr >
+struct _Deque_iterator;
+
+}
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_PARAMS_libstdcpp_deque_iterator() \
+( template ( ( typename ) _Tp, ( typename ) _Ref, ( typename ) _Ptr ) )
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_NAME_libstdcpp_deque_iterator() \
+::_GLIBCXX_STD_D::_Deque_iterator< _Tp, _Ref, _Ptr >
+
+#endif // BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_DEQUE_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_bool_iterator_.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_bool_iterator_.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,22 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_BOOL_ITERATOR_HPP
+#define BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_BOOL_ITERATOR_HPP
+
+#include <vector>
+
+//#include <iterator>
+//#include <c++/bits/stl_bvector.h>
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_PARAMS_libstdcpp_vector_bool_iterator()
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_NAME_libstdcpp_vector_bool_iterator()\
+::std::_Bit_iterator
+
+#endif//BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_BOOL_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_iterator_.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/std_forward_decl/_libstdcpp_/_vector_iterator_.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_ITERATOR_HPP
+#define BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_ITERATOR_HPP
+
+namespace __gnu_cxx {
+
+// std::vector iterators
+template< typename _Iterator, typename _Container >
+class __normal_iterator;
+
+}
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_PARAMS_libstdcpp_vector_iterator() \
+( template ( ( typename ) _Iterator, ( typename ) _Container ) )
+
+#define BOOST_GENERIC_DETAIL_STD_FWD_DECL_NAME_libstdcpp_vector_iterator() \
+::__gnu_cxx::__normal_iterator< _Iterator, _Container >
+
+#endif // BOOST_GENERIC_DETAIL_STD_FORWARD_DECL_LIBSTDCPP_VECTOR_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/detail/tag_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/tag_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TAG_TYPE_HPP
+#define BOOST_GENERIC_DETAIL_TAG_TYPE_HPP
+
+#include <boost/generic/detail/type_stack.hpp>
+
+namespace boost_generic_detail { namespace {
+
+// Takes a type_stack of concept/concept map pairs
+template< class ConceptMapTypes >
+struct tag_type;
+
+template< class... ConceptMap >
+struct tag_type< type_stack< ConceptMap... > >
+ : virtual ConceptMap::first... {};
+
+} }
+
+#endif // BOOST_GENERIC_DETAIL_TAG_TYPE_HPP

Added: sandbox/generic/include/boost/generic/detail/tail_arguments.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/tail_arguments.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,29 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_HPP
+#define BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_HPP
+
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/array/data.hpp>
+#include <boost/preprocessor/array/pop_front.hpp>
+#include <boost/preprocessor/variadic/to_array.hpp>
+
+#define BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( ... ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_ARRAY_DATA \
+ ( BOOST_PP_ARRAY_POP_FRONT( BOOST_PP_VARIADIC_TO_ARRAY( __VA_ARGS__ ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TAIL_WRAPPED_ARGUMENTS( params ) \
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS params
+
+#define BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ )
+
+#endif // BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_HPP

Added: sandbox/generic/include/boost/generic/detail/tail_is_empty.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/tail_is_empty.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,15 @@
+#ifndef BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY_HPP
+#define BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/tail_arguments.hpp>
+
+#define BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY \
+( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_IS_EMPTY \
+( BOOST_GENERIC_DETAIL_TAIL_ARGUMENTS_AFTER_RESCAN( __VA_ARGS__ ) )
+
+#endif // BOOST_GENERIC_DETAIL_TAIL_IS_EMPTY_HPP

Added: sandbox/generic/include/boost/generic/detail/template_decl.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/template_decl.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,71 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TEMPLATE_DECL_HPP
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_HPP
+
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/params_for_each.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <utility> // For declval // ToDo: Remove this include
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_PARAMS_MACRO( s, data, elem ) \
+BOOST_GENERIC_DETAIL_RESCAN elem
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_ARGS_MACRO( s, data, elem ) \
+BOOST_GENERIC_DETAIL_EAT elem
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_DECLVAL_ARGS_MACRO(s,data,elem)\
+::std::declval< BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( elem ) >()
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_PARAMS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_PARAMS_MACRO, ~ \
+, params \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_ARGS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_ARGS_MACRO, ~ \
+, params \
+)
+
+#define BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_DECLVAL_ARGS( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_ENUM \
+( BOOST_GENERIC_AUTO_CONCEPT_MAP_TEMPLATE_DECLVAL_ARGS_MACRO, ~ \
+, params \
+)
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL( params ) \
+template< class BOOST_GENERIC_DETAIL_HEAD_WRAPPED_ARGUMENT( params ) \
+ BOOST_PP_IIF \
+ ( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( params ) \
+ , 1 \
+ ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_IMPL_NOT_FIRST \
+ )( params ) \
+ >
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_IMPL_NOT_FIRST( params ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_IMPL_MACRO, ~, params )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_IMPL_MACRO( r, data, elem ) \
+, class elem
+
+#endif // BOOST_GENERIC_DETAIL_TEMPLATE_DECL_HPP

Added: sandbox/generic/include/boost/generic/detail/template_decl_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/template_decl_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,95 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAILS_TEMPLATE_DECL_DETAILS_HPP
+#define BOOST_GENERIC_DETAILS_TEMPLATE_DECL_DETAILS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+//Result is:
+// (has_param_dets)(param_dets)
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_PAREN \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_HAS_PARAM_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_PARAM_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_HAS_PARAM_DETS( dets ) \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID_IMPL \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_MAKE_TEMPLATE( dets ) \
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS \
+ ( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_PARAM_DETS( dets ) ) \
+ >
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID_IMPL( dets ) \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+( BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_PARAM_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_PAREN( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( __VA_ARGS__ ) ) \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_TEMPLATE \
+ , BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_INVALID \
+ )( BOOST_GENERIC_DETAIL_REMOVE_PAREN( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_INVALID( ... ) \
+(0)(no_param_dets)
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_TEMPLATE( ... ) \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_TEMPLATE_IMPL \
+( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS \
+ ( BOOST_GENERIC_DETAIL_EAT_TEMPLATE( __VA_ARGS__ ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS_IMPL_TEMPLATE_IMPL( dets ) \
+( 1 )( dets )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+ , BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE_SINGLE_ARG \
+ )( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) )
+
+// ToDo: First check that it's not starting with parentheses
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE_SINGLE_ARG( arg ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_PP_CAT( BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE_IMPL, arg ) ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TEMPLATE_IMPLtemplate ~,~
+
+#define BOOST_GENERIC_DETAIL_EAT_TEMPLATE( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_TEMPLATE, __VA_ARGS__)
+
+#define BOOST_GENERIC_DETAIL_EAT_TEMPLATEtemplate
+
+#endif // BOOST_GENERIC_DETAILS_TEMPLATE_DECL_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/this/function_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/this/function_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,118 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_HPP
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_HPP
+
+#include <boost/generic/detail/function_decl_details.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+
+// a nested typename requirement is specified as:
+// ( typename name )
+
+// Result form is the same as that of a nonnested typename
+// Error macros take an additional argument -- the this_t argument
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS( ... ) \
+BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL( fun_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( fun_dets ) \
+, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_VALID_NONEST \
+, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_INVALID_NONEST \
+)( fun_dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IS_VALID \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IS_PARTIAL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_PARTIAL
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_NAME \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_DEFINITION \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_DEFINITION
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_HAS_DEFINITION \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IS_PARTIAL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_PARTIAL
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_ERRORS \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_ERRORS
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_HAS_ERRORS \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_ERRORS
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_RETURN_TYPE \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_PARAM_LIST_DETS \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_PARAM_LIST_DETS
+
+// ToDo: Properly define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_INVALID_NONEST
+// Have it convert the "nonnested function" errors to "nested function" errors
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_INVALID_NONEST( fun_dets )\
+fun_dets
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_VALID_NONEST( fun_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION( fun_dets ) \
+, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_DEFINITION \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( fun_dets ) \
+)( fun_dets )
+
+// ToDo: Insert error about not allowing defaults
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IMPL_DEFINITION( fun_dets ) \
+BOOST_PP_SEQ_REPLACE( fun_dets, 0, 0 )
+
+// expands to macro( validity_bit, name, empty_or_default_in_paren )
+// ToDo: pass error data as well for visitation
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT( dets, this_t \
+ , valid_macro, inv_macro \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT_IMPL_INVALID \
+ )( dets, this_t, valid_macro, inv_macro )
+
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT_IMPL_VALID( dets, this_t \
+ , valid_macro \
+ , inv_macro \
+ ) \
+valid_macro \
+( this_t \
+, (BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_RETURN_TYPE( dets )) \
+, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_NAME( dets ) \
+, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_PARAM_LIST_DETS( dets ) \
+)
+
+// ToDo: Have it call inv_macro with a variadic sequence of errors
+#define BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT_IMPL_INVALID( dets \
+ , this_t \
+ , valid_macro\
+ , inv_macro \
+ ) \
+inv_macro( this_t, BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_ERRORS( dets ) )
+
+// ToDo: Fix this
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_ERROR_DEFINITION( dets, this_t ) \
+"A member function requirement cannot have a default definition: " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_RETURN_TYPE( dets ) ) \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_t "::" \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_NAME( dets ) ) " = " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_DEFINITION( dets ) ) ";"
+
+#endif // BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/this/typename_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/this/typename_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,102 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_HPP
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_HPP
+
+#include <boost/generic/detail/typename_details.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+
+// a nested typename requirement is specified as:
+// ( typename name )
+
+// Result form is the same as that of a nonnested typename
+// Error macros take an additional argument -- the this_t argument
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS( ... ) \
+BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL( typename_dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( typename_dets ) \
+, BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_VALID_NONEST \
+, BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_INVALID_NONEST \
+)( typename_dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_VALID \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_PARTIAL \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_PARTIAL
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_NAME \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_DEFAULT \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_HAS_DEFAULT \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_PARTIAL \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_PARTIAL
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_ERRORS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_ERRORS
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_HAS_ERRORS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_ERRORS
+
+// ToDo: Properly define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_INVALID_NONEST
+// Have it convert the "nonnested typename" errors to "nested typename " errors
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_INVALID_NONEST( typename_dets )\
+typename_dets
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_VALID_NONEST( typename_dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( typename_dets ) \
+ , BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_DEFAULT \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( typename_dets ) \
+ )( typename_dets )
+
+// ToDo: Insert error about not allowing defaults
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IMPL_DEFAULT( typename_dets ) \
+BOOST_PP_SEQ_REPLACE( typename_dets, 0, 0 )
+
+// expands to macro( validity_bit, name, empty_or_default_in_paren )
+// ToDo: pass error data as well for visitation
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT( dets, this_t \
+ , valid_macro, inv_macro \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT_IMPL_INVALID \
+ )( dets, this_t, valid_macro, inv_macro )
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT_IMPL_VALID( dets, this_t \
+ , valid_macro \
+ , inv_macro \
+ ) \
+valid_macro( this_t, BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_NAME( dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT_IMPL_INVALID( dets \
+ , this_t \
+ , valid_macro\
+ , inv_macro \
+ ) \
+inv_macro( this_t, BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_ERRORS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_TYPENAME_ERROR_DEFAULT( dets, this_t ) \
+"A nested typename requirement cannot have a default: typename " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE this_t "::" \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_NAME( dets ) ) " = " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_DEFAULT( dets ) ) ";"
+
+#endif // BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/this_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/this_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,382 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_THIS_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_THIS_DETAILS_HPP
+
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/ordered_iif.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/generic/detail/seq_size.hpp>
+#include <boost/generic/detail/this/function_dets.hpp>
+#include <boost/generic/detail/this/typename_dets.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/control/while.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/replace.hpp>
+
+// A "this" parameter specifies a series of member requirement.
+// It is of the form:
+// ( this (type_name)
+// , requirement0
+// , requirement1
+// , etc.
+// )
+
+// a this requirement is specified as:
+// ( this name )
+// -or-
+// ( this name, (default_type) )
+
+// Result is of the form:
+// (validity_bit)((type))((requirement_seq_dets))
+// (is_partial_bit)((error_macro_seq))
+
+// requirement_seq_dets is a sequence of requirement specifications
+// Each element of the sequence is of the form:
+// ( id_name )( details )((error_msgs_seq))
+// id_name is one of:
+// if
+// typename
+// function // ToDo: Add support for auto function declarations
+// type_template
+// function_template
+// unknown
+// fatal_error (i.e. unparenthesized arg, abort processing)
+//
+// "details" are the details corresponding to that parameter
+// requirement_seq_dets may be empty, in which case there are no params
+//
+// error_msg_seq is either empty or a sequence of c-strings representing errors
+#define BOOST_GENERIC_DETAIL_THIS_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+
+// expands to:
+// macro(validity_bit, (return_type), name, param_list_details
+// , (definition) -or- empty parameter if no defition
+// )
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT( dets, typename_macros \
+ , function_macros \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_THIS_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPL \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( dets, typename_macros, function_macros )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPL( dets, typename_macros \
+ , function_macros \
+ ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+( BOOST_PP_SEQ_ELEM \
+ ( 1, BOOST_PP_SEQ_FOLD_LEFT \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_VALID_IMPL_MACRO \
+ , ( ( (BOOST_GENERIC_DETAIL_THIS_DETS_TYPE( dets )) \
+ , typename_macros, function_macros \
+ ) \
+ )(()) \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_REQUIREMENTS( dets ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_VALID_IMPL_MACRO( s, state, dets )\
+BOOST_PP_SEQ_REPLACE \
+( state, 1 \
+, ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, state ) ) \
+ BOOST_PP_CAT \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPL \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_REQ_DETS_TAG( dets ) \
+ )( BOOST_GENERIC_DETAIL_THIS_DETS_REQ_DETS_DETS( dets ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, state ) ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLtypename( ... ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLtypename_( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLtypename_( dets \
+ , this_type \
+ , typename_macros \
+ , function_macros \
+ ) \
+BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_VISIT \
+( dets, this_type \
+, BOOST_PP_SEQ_ELEM( 0, typename_macros ) \
+, BOOST_PP_SEQ_ELEM( 1, typename_macros ) \
+)
+
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLfunction( ... ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLfunction_( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_VISIT_IMPLfunction_( dets \
+ , this_type \
+ , typename_macros \
+ , function_macros \
+ ) \
+BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_VISIT \
+( dets, this_type \
+, BOOST_PP_SEQ_ELEM( 0, function_macros ) \
+, BOOST_PP_SEQ_ELEM( 1, function_macros ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_THIS \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_INVALID \
+)( BOOST_GENERIC_DETAIL_REMOVE_PAREN( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_REQUIREMENTS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_REQ_DETS_TAG( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_REQ_DETS_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_REQUIREMENTS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_HAS_REQUIREMENTS( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_REQUIREMENTS( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_INVALID( ... ) \
+(0)(())(())(0)((("Not a \"this\" declaration.")))
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_PARTIAL_INVALID( ... ) \
+(0)(())(())(1)((("Invalid \"this\" declaration.")))
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_THIS( ... ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_EATEN_THIS \
+( BOOST_GENERIC_DETAIL_EAT_THIS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_EATEN_THIS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_EATEN_THIS_PAREN \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_PARTIAL_INVALID \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_EATEN_THIS_PAREN( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_PARTIAL_INVALID \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_FIRST_PART_VALID \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_FIRST_PART_VALID( ... ) \
+BOOST_PP_IIF( BOOST_PP_EQUAL( BOOST_GENERIC_DETAIL_NUM_ARGS( __VA_ARGS__ ), 1 )\
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_VALID_NO_NESTED \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_VALID_NO_NESTED( this_t ) \
+(1)(this_t)(())(1)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_NAME( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_DETS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IS_VALID(dets) \
+BOOST_PP_SEQ_ELEM( 2, dets )
+
+// Note: The while state is
+// (curr_index)(seq)(param_dets_seq)(has_errors_bit)
+// Where param_dets_seq is a sequence of elements of the form:
+// (param_name)(param_dets)( (error_msg_seq) )
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS( this_t, ... ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_WHILE_STATE_TO_DETS \
+( this_t \
+, BOOST_PP_WHILE \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_PRED \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_OP \
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS_INITIAL_STATE \
+ ( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ \
+ ( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( __VA_ARGS__ ) ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_WHILE_STATE_TO_DETS( this_t,state )\
+(BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_VALID(state)) \
+(this_t) \
+((BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_DETS(state))) \
+(1) \
+((BOOST_PP_IIF \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_VALID(state) \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( ("Invalid \"this\" parameter.") ) \
+ )() \
+))
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_CURR_INDEX( state ) \
+BOOST_PP_SEQ_ELEM( 0, state )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_SEQ( state ) \
+BOOST_PP_SEQ_ELEM( 1, state )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_DETS( state ) \
+BOOST_PP_SEQ_ELEM( 2, state )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_VALID( state ) \
+BOOST_PP_SEQ_ELEM( 3, state )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_PRED( d, state ) \
+BOOST_PP_COMPL \
+( BOOST_PP_BITOR \
+ ( BOOST_PP_EQUAL \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_CURR_INDEX( state ) ) \
+ , BOOST_GENERIC_DETAIL_SEQ_SIZE \
+ ( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_SEQ( state ) ) \
+ ) \
+ , BOOST_PP_COMPL( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_IS_VALID( state ) ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_OP( d, state ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_OP_IMPL \
+( state \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ ( BOOST_PP_SEQ_ELEM \
+ ( BOOST_PP_INC( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_CURR_INDEX( state ) )\
+ , BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_SEQ( state ) \
+ ) \
+ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_OP_IMPL( state, dets )\
+( BOOST_PP_INC( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_CURR_INDEX( state ) ) ) \
+( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_SEQ( state ) ) \
+( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_DETS(state)(dets) ) \
+( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IS_VALID( dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS_INITIAL_STATE( seq ) \
+BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS_INITIAL_STATE_IMPL \
+( seq \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAMS_INITIAL_STATE_IMPL( \
+ seq \
+ , dets\
+ ) \
+(0) \
+(seq) \
+((dets)) \
+( BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IS_VALID( dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_TAG_TYPENAME( dets ) \
+(typename)(dets)(1)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_TYPENAME_PARTIAL( dets ) \
+(typename)(dets)(0)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_TAG_FUNCTION( dets ) \
+(function)(dets)(1)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_FUNCTION_PARTIAL( dets ) \
+(function)(dets)(0)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL( elem ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( elem ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL_PAREN \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL_NOT_PAREN \
+)( elem )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_NESTED_PARAM_DETS_IMPL_PAREN(elem) \
+BOOST_GENERIC_DETAIL_ORDERED_IIF \
+( elem \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_UNRECOGNIZED_NESTED_PARAM \
+, (BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS) \
+ (BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_TYPENAME) \
+, (BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS) \
+ (BOOST_GENERIC_DETAIL_THIS_FUNCTION_DETS_IS_PARTIAL) \
+ (BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_FUNCTION) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_TYPENAME( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_THIS_TYPENAME_DETS_IS_VALID( dets ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_TAG_TYPENAME \
+, BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_TYPENAME_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_FUNCTION( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID_WITHOUT_DEFINITION( dets ) \
+, BOOST_GENERIC_DETAIL_THIS_DETS_IMPL_TAG_FUNCTION \
+, BOOST_GENERIC_DETAIL_THIS_DETS_ANALYZE_FUNCTION_PARTIAL \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THIS_IMPL( ... ) \
+BOOST_PP_EQUAL \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN \
+ ( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) foo \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_THISthis ,
+
+#define BOOST_GENERIC_DETAIL_EAT_THIS( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_THIS, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_THISthis
+
+#endif // BOOST_GENERIC_DETAIL_THIS_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/this_mem_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/this_mem_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,86 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_THIS_MEM_DETS_HPP
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_HPP
+
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_this.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// Takes an argument of the form:
+// this(nonempty_type) something_or_nothing
+// Yields result in the form:
+// (is_valid_bit)(is_partial_bit)((nonempty_type))((something_or_nothing))
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_WITH_THIS( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_NOT_THIS \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL_INVALID( dets ) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( dets ) \
+, BOOST_PP_COMPL( BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 3, dets ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_QUALIFIED_NAME( dets ) \
+ BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE( dets ) \
+::BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME( dets )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_NOT_THIS( ... ) \
+(0)(0)((invalid_this_member_declaration))((invalid_this_member_declaration))
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_THIS_EATEN \
+( BOOST_GENERIC_DETAIL_EAT_THIS( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_THIS_EATEN( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_PAREN \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_NO_PAREN \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_NO_PAREN( ... ) \
+(0)(1)((invalid_this_member_declaration))((invalid_this_member_declaration))
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_PAREN( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_REMOVE_PAREN_AND_EXTRA_DATA( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_EMPTY_TYPE \
+, BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_VALID \
+)( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_EAT_WRAPPED( __VA_ARGS__ ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_EMPTY_TYPE( ... ) \
+(0)(1)((invalid_this_member_declaration))((invalid_this_member_declaration))
+
+#define BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IMPL_VALID( type_in_paren, ... ) \
+(1)(1)(type_in_paren)((__VA_ARGS__))
+
+#endif // BOOST_GENERIC_DETAIL_THIS_MEM_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/trailing_bases.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/trailing_bases.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TRAILING_BASES_HPP
+#define BOOST_GENERIC_DETAIL_TRAILING_BASES_HPP
+
+#include <boost/generic/detail/params_for_each.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+
+#define BOOST_GENERIC_DETAIL_TRAILING_BASES( prefix, params ) \
+BOOST_GENERIC_DETAIL_PARAMS_FOR_EACH \
+( BOOST_GENERIC_DETAIL_TRAILING_BASES_MACRO, prefix \
+, BOOST_GENERIC_DETAIL_PARAMS_TO_LIST( params ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TRAILING_BASES_MACRO( r, prefix, elem ) \
+, prefix BOOST_GENERIC_REMOVE_PAREN( elem )
+
+#endif // BOOST_GENERIC_DETAIL_TRAILING_BASES_HPP

Added: sandbox/generic/include/boost/generic/detail/type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TYPE_HPP
+#define BOOST_GENERIC_DETAIL_TYPE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace generic { namespace detail {
+
+template< class T >
+struct type_ { typedef T type; };
+
+template< class T >
+::boost::mpl::true_ boost_generic_detail_istantiate_if_auto( type_< T > );
+
+} } }
+
+#endif
+
+#endif // BOOST_GENERIC_DETAIL_TYPE_HPP

Added: sandbox/generic/include/boost/generic/detail/type_and_fun_separator_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/type_and_fun_separator_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,160 @@
+#ifndef BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_VISITOR_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/rescan.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_TYPES( d ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, d ) )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_FUNS( d ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, d ) )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORaxiom( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORrequires( i, d, arg )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORtypename( i, d, name \
+ , default_ \
+ ) \
+((BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_TYPES(d)((i)(name)))) \
+((BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_FUNS(d)))
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORconstrained_typename( i, d \
+ , constraint\
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORtypename( i, d, name, default_ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORmember_typename( i, d \
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i ) \
+((BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_TYPES(d))) \
+((BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_FUNS(d)((i))))
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORfunction( i, d, return_type \
+ , name, param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORmember_function( i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORstatic_member_function( \
+ i, d \
+ , return_type\
+ , this_type \
+ , name \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_BASIC_OPERATOR( i, d \
+ , return_type\
+ , operator_ \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORprefix_unary_operator \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORpostfix_unary_operator \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORbinary_operator \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_BASIC_OPERATOR
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORcall_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORcomma_operator( i, d \
+ , return_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORarrow_operator( i, d \
+ , return_type\
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORassign_operator( i, d \
+ , return_type\
+ , this_type \
+ , param_dets \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_INSERT_FUN( i )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORdeallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORconstructor( i, d \
+ , this_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORexplicit_constructor( \
+ i, d \
+ , this_type \
+ , param_dets\
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORdestructor( i, d, this_type \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORconversion( i, d \
+ , target_type \
+ , param_dets \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATORexplicit_conversion( \
+ i, d \
+ , target_type\
+ , param_dets \
+ , default_ \
+ )
+
+
+#endif // BOOST_GENERIC_DETAIL_TYPE_AND_FUN_SEPARATOR_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/type_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/type_list.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,10 @@
+#ifndef BOOST_GENERIC_DETAIL_TYPE_LIST_HPP
+#define BOOST_GENERIC_DETAIL_TYPE_LIST_HPP
+
+namespace boost { namespace generic { namespace detail {
+
+template< class... > struct type_list;
+
+} } }
+
+#endif // BOOST_GENERIC_DETAIL_TYPE_LIST_HPP

Added: sandbox/generic/include/boost/generic/detail/type_stack.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/type_stack.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,215 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TYPE_STACK_HPP
+#define BOOST_GENERIC_DETAIL_TYPE_STACK_HPP
+
+// ToDo: Optimize this with preprocessing
+
+#include <boost/generic/limits.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/size_t.hpp>
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+
+#endif
+
+
+namespace boost_generic_detail {
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+
+// Used with decltype in return types to get SFINAE
+template< class... T >
+struct type_stack {};
+
+#else
+
+// Used with decltype in return types to get SFINAE
+template< BOOST_PP_ENUM_BINARY_PARAMS
+ ( BOOST_PP_INC( BOOST_GENERIC_MAX_CONCEPT_ARITY )
+ , class T, = void BOOST_PP_INTERCEPT
+ )
+ >
+struct type_stack;
+
+#endif // End no variadic template check
+
+template< class TypeStack, class Elem >
+struct push;
+
+template< class TypeStack >
+struct pop;
+
+template< class TypeStack, class Elem >
+struct has;
+
+
+template< class TypeStack, class Predicate >
+struct contains_match;
+
+struct no_match;
+
+template< class TypeStack >
+struct size;
+
+template< class TypeStack, class Predicate >
+struct find_if;
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+
+template< class F >
+void for_each( type_stack<> seq, F fun ) {}
+
+template< class Head, class... T, class F >
+void for_each( type_stack< Head, T... > seq, F fun )
+{
+ fun( Head() );
+ for_each( type_stack< T... >(), fun );
+}
+
+template< class... T, class Elem >
+struct push< type_stack< T... >, Elem >
+{
+ typedef type_stack< Elem, T... > type;
+};
+
+template< class Head, class... T >
+struct pop< type_stack< Head, T... > >
+{
+ typedef type_stack< T... > type;
+};
+
+template< class Elem >
+struct has< type_stack<>, Elem >
+ : boost::mpl::false_ {};
+
+template< class Head, class... T, class Elem >
+struct has< type_stack< Head, T... >, Elem >
+ : has< typename pop< type_stack< T... > >::type, Elem > {};
+
+template< class Elem, class... T >
+struct has< type_stack< Elem, T... >, Elem >
+ : boost::mpl::true_ {};
+
+template< class Predicate >
+struct contains_match< type_stack<>, Predicate >
+ : boost::mpl::false_ {};
+
+template< class Head, class... T, class Predicate >
+struct contains_match< type_stack< Head, T... >, Predicate >
+ : boost::mpl::or_
+ < typename boost::mpl::apply
+ < Predicate
+ , Head
+ >
+ ::type
+ , contains_match< type_stack< T... >, Predicate >
+ > {};
+
+template< class... T >
+struct size< type_stack< T... > > : ::boost::mpl::size_t< sizeof...( T ) > {};
+
+template< class Predicate >
+struct find_if< type_stack<>, Predicate >
+{
+ typedef no_match type;
+};
+
+template< class Head, class... T, class Predicate >
+struct find_if< type_stack< Head, T... >, Predicate >
+ : boost::mpl::if_
+ < typename boost::mpl::apply
+ < Predicate
+ , Head
+ >
+ ::type
+ , boost::mpl::identity< Head >
+ , find_if< type_stack< T... >, Predicate >
+ >
+ ::type {};
+
+#else
+
+#define BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_CALL_FUN_MAC( z, n, text ) \
+fun( BOOST_PP_CAT( T, n )() );
+
+#define BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_MAC( z, n, test ) \
+template< BOOST_PP_ENUM_PARAMS_Z( z, n, class T ) \
+ BOOST_PP_COMMA_IF( n ) \
+ class F \
+ > \
+void for_each \
+ ( type_stack< BOOST_PP_ENUM_PARAMS_Z( z, n, T ) > seq \
+ , F fun \
+ ) \
+{ \
+ BOOST_PP_ENUM_ ## z \
+ ( n, BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_CALL_FUN_MAC, ~ ) \
+}
+
+BOOST_PP_REPEAT( BOOST_PP_INC( BOOST_GENERIC_MAX_CONCEPT_ARITY )
+ , BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_MAC
+ , ~
+ )
+
+#undef BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_MAC
+#undef BOOST_GENERIC_DETAIL_TYPE_STACK_FOR_EACH_CALL_FUN_MAC
+
+#define BOOST_GENERIC_DETAIL_TYPE_STACK_PUSH_MAC( z, n, test ) \
+template< BOOST_PP_ENUM_PARAMS_Z( z, n, class T ) \
+ BOOST_PP_COMMA_IF( n ) \
+ class Elem \
+ > \
+struct push< type_stack< BOOST_PP_ENUM_PARAMS_Z( z, n, T ) >, Elem > \
+{ \
+ typedef type_stack< Elem BOOST_PP_ENUM_TRAILING_PARAMS_Z( z, n, T ) > type; \
+};
+
+
+BOOST_PP_REPEAT( BOOST_PP_INC( BOOST_GENERIC_MAX_CONCEPT_ARITY )
+ , BOOST_GENERIC_DETAIL_TYPE_STACK_PUSH_MAC
+ , ~
+ )
+
+#undef BOOST_GENERIC_DETAIL_TYPE_STACK_PUSH_MAC
+
+#define BOOST_GENERIC_DETAIL_TYPE_STACK_POP_MAC( z, n, test ) \
+template< class Head \
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z( z, n, class T ) \
+ > \
+struct pop< type_stack< Head BOOST_PP_ENUM_TRAILING_PARAMS_Z( z, n, T ) > > \
+{ \
+ typedef type_stack< BOOST_PP_ENUM_PARAMS_Z( z, n, T ) > type; \
+};
+
+BOOST_PP_REPEAT( BOOST_GENERIC_MAX_CONCEPT_ARITY
+ , BOOST_GENERIC_DETAIL_TYPE_STACK_POP_MAC
+ , ~
+ )
+
+#undef BOOST_GENERIC_DETAIL_TYPE_STACK_POP_MAC
+
+#endif // End no variadic template check
+
+}
+
+#endif // BOOST_GENERIC_DETAIL_TYPE_STACK_HPP

Added: sandbox/generic/include/boost/generic/detail/typedef_first_pass_types_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/typedef_first_pass_types_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,102 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_VISITOR_HPP
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESrequires( ... )
+
+// ToDo: Only do this if a default is not present
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPEStypename( i, d, name \
+ , default_ \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_WRAPPED_EMPTY( default_ ) \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_NO_DEF \
+ , BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_WITH_DEF \
+ )( i, d, name )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_NO_DEF( i, d, name ) \
+typedef typename BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ < BoostGenericDetailImplConceptMap >::type name;
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_WITH_DEF( i, d, name ) \
+typedef typename BOOST_PP_CAT( boost_generic_detail_first_pass, name ) \
+ < BoostGenericDetailImplConceptMap \
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_AUGMENTED_ARGS \
+ ( d, BoostGenericDetailImpl ) \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESconstrained_typename( i, d\
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPEStypename( i, d, name, default_ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESmember_typename( i, d \
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPEScall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPEScomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESsubscript_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPESexplicit_conversion( ... )
+
+#endif // BOOST_GENERIC_DETAIL_TYPEDEF_FIRST_PASS_TYPES_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/typename_details.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/typename_details.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,330 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TYPENAME_DETAILS_HPP
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETAILS_HPP
+
+#include <boost/generic/detail/eat.hpp>
+#include <boost/generic/detail/eat_part_after_paren.hpp>
+#include <boost/generic/detail/head_argument.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/generic/detail/is_parenthesized.hpp>
+#include <boost/generic/detail/num_args.hpp>
+#include <boost/generic/detail/num_args_is_1.hpp>
+#include <boost/generic/detail/num_args_is_2.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/starts_empty_or_parenthesized.hpp>
+#include <boost/generic/detail/this_mem_dets.hpp>
+#include <boost/generic/detail/variadic_cat.hpp>
+#include <boost/generic/detail/variadic_empty.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+// a typename requirement is specified as:
+// typename name
+// -or-
+// typename name, default_type
+
+// Result is of the form:
+// (validity_bit)(name)((default_value_in_paren_or_empty))(is_partial_bit)
+// ((error_msg_seq))(nested_dets)((constraint))
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAME( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NO_TYPENAME \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NO_TYPENAME( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_CONSTRAINED_TYPENAME \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_INVALID \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_CONSTRAINED_TYPENAME( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED \
+ ( BOOST_GENERIC_DETAIL_EAT_WRAPPED( __VA_ARGS__ ) ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_INVALID \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_CONSTRAINED_TYPENAME_ \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_CONSTRAINED_TYPENAME_( ... ) \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME_ \
+( BOOST_GENERIC_DETAIL_EAT_PART_AFTER_PAREN( __VA_ARGS__ ) \
+, __VA_ARGS__ \
+)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_CONSTRAINED_TYPENAME_IMPL( \
+ constraint\
+ , ... \
+ ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS_IS_1( constraint ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME_ \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_PARTIAL \
+ )( constraint, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_WRAPPED_TYPENAME_DETS( wrapped_arg ) \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS wrapped_arg
+
+// expands to macro( validity_bit, name, empty_or_default_in_paren )
+// ToDo: pass error data as well for visitation
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT(dets, valid_macro, inv_macro) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_IMPL_VALID \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_IMPL_INVALID \
+ )( dets, valid_macro, invalid_macro )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_IMPL_VALID( dets, valid_macro \
+ , inv_macro \
+ ) \
+valid_macro( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_IMPL_INVALID( dets \
+ , valid_macro \
+ , inv_macro \
+ ) \
+inv_macro( BOOST_GENERIC_DETAIL_TYPENAME_DETS_ERRORS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_VALID( dets, macro ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+ , macro \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( name ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( name ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT_INVALID( dets, macro ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+ , macro \
+ , BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+ )( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( name ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( name ) \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME( ... ) \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME_ \
+( (), __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_IS_TYPENAME_( constraint, ... )\
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_NUM_ARGS_IS_1( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NO_DEF \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NOT_1_PARAM \
+)( constraint, BOOST_GENERIC_DETAIL_EAT_TYPENAME_OR_CONSTRAINT( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+BOOST_PP_SEQ_ELEM( 0, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NESTED_DETS( dets ) \
+BOOST_PP_SEQ_ELEM( 5, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NESTED_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_TYPE( dets ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( dets ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_TYPE_ \
+, BOOST_GENERIC_DETAIL_VARIADIC_EMPTY \
+)( dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_TYPE_( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_TYPE \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NESTED_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID_WITHOUT_DEFAULT( dets ) \
+BOOST_PP_BITAND \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( dets ) \
+, BOOST_PP_COMPL( BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( dets ) ) \
+)
+
+// ToDo: Properly define this once constraints are implemented
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_CONSTRAINT( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 6, dets ) )
+
+// ToDo: Properly define this once constraints are implemented
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_CONSTRAINED( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_CONSTRAINT( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( dets ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME_NESTED \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME_NONNESTED \
+ )( dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME_NESTED( dets ) \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS_NAME \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NESTED_DETS( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME_NONNESTED( dets ) \
+BOOST_PP_SEQ_ELEM( 1, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_PARTIAL( dets ) \
+BOOST_PP_SEQ_ELEM( 3, dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_ERRORS( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 4, dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_ERRORS( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_ERRORS( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( dets ) \
+BOOST_PP_COMPL \
+( BOOST_GENERIC_DETAIL_IS_EMPTY \
+ ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT_IMPL( dets ) ) \
+)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( dets ) \
+ , BOOST_GENERIC_DETAIL_REMOVE_PAREN \
+ , BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY \
+ ( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT_IMPL( dets ) ) \
+ )( BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT_IMPL( dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT_IMPL( dets ) \
+BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 2, dets ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NO_DEF( constraint, arg ) \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_WITH_DEF \
+( constraint, BOOST_GENERIC_DETAIL_THIS_MEM_DETS( arg ), arg, )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_NOT_1_PARAM( constraint, ... )\
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_EMPTY( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_PARTIAL \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_AT_LEAST_2_PARAMS \
+ )( constraint \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS \
+ ( BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) ) \
+ , __VA_ARGS__ \
+ )
+
+// ToDo: Branch with better error if a nested typename requirement has a default
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_AT_LEAST_2_PARAMS( constraint \
+ ,this_mem_dets\
+ , name, ... \
+ ) \
+BOOST_PP_IIF \
+( BOOST_PP_BITOR \
+ ( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( this_mem_dets ) \
+ ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_PARTIAL \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_WITH_DEF \
+)( constraint, this_mem_dets, name, ( __VA_ARGS__ ) )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_WITH_DEF( constraint \
+ , this_mem_dets, name \
+ , def \
+ ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( name ) \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_PARTIAL \
+, BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_VALID \
+)( constraint, this_mem_dets, name, def )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_VALID( constraint \
+ , this_mem_dets, name, def\
+ ) \
+(1) \
+(name) \
+((def)) \
+(1) \
+(()) \
+(this_mem_dets) \
+(constraint)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_PARTIAL( ... ) \
+(0) \
+(name_of_invalid_typename_requirement) \
+(()) \
+(1) \
+((("Invalid typename declaration"))) \
+(~) \
+(())
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_IMPL_INVALID( ... ) \
+(0) \
+(name_of_invalid_typename_requirement) \
+(()) \
+(0) \
+((("Invalid typename declaration"))) \
+(~) \
+(())
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAME( ... ) \
+BOOST_PP_IIF \
+( BOOST_GENERIC_DETAIL_STARTS_EMPTY_OR_PARENTHESIZED( __VA_ARGS__ ) \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( 0 ) \
+, BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAME_IMPL \
+)( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAME_IMPL( ... ) \
+BOOST_GENERIC_DETAIL_NUM_ARGS_AFTER_RESCAN_IS_2 \
+( BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+ ( BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAME \
+ , BOOST_GENERIC_DETAIL_HEAD_ARGUMENT( __VA_ARGS__ ) \
+ ) \
+)
+
+#define BOOST_GENERIC_DETAIL_STARTS_WITH_TYPENAMEtypename ,
+
+#define BOOST_GENERIC_DETAIL_EAT_TYPENAME( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT \
+( BOOST_GENERIC_DETAIL_EAT_TYPENAME, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_EAT_TYPENAMEtypename
+
+#define BOOST_GENERIC_DETAIL_EAT_TYPENAME_OR_CONSTRAINT( ... ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( __VA_ARGS__ ) \
+ , BOOST_GENERIC_DETAIL_EAT_WRAPPED \
+ , BOOST_GENERIC_DETAIL_EAT_TYPENAME \
+ )( __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_ERROR_DEFAULT_NOT_PAREN( dets ) \
+"The default of a typename requirement must be parenthesized: ( typename " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) ) " )"
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_ERROR_DEFAULT_NOT_PAREN( dets ) \
+"The default of a typename requirement must be parenthesized: ( typename " \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets ) ) " )"
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL( dets ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( dets ) \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_IMPL_NO_DEF \
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_IMPL_DEF \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_IMPL_NO_DEF( dets ) \
+typename BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( dets )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_IMPL_DEF( dets ) \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_IMPL_NO_DEF( dets ) = \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( dets );
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL_STR( dets ) \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE \
+( BOOST_GENERIC_DETAIL_TYPENAME_DETS_NATIVE_DECL( dets ) )
+
+#endif // BOOST_GENERIC_DETAIL_TYPENAME_DETAILS_HPP

Added: sandbox/generic/include/boost/generic/detail/typename_nested_dets.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/typename_nested_dets.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+#ifndef BOOST_GENERIC_DETAIL_TYPENAME_NESTED_DETS_HPP
+#define BOOST_GENERIC_DETAIL_TYPENAME_NESTED_DETS_HPP
+
+#include <boost/generic/detail/typename_details.hpp>
+
+// Takes an arg of the form:
+// typename this(type) name
+#define BOOST_GENERIC_DETAIL_TYPENAME_NESTED_DETS( ... ) \
+BOOST
+
+#endif // BOOST_GENERIC_DETAIL_TYPENAME_NESTED_DETS_HPP

Added: sandbox/generic/include/boost/generic/detail/typename_sequence_vistor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/typename_sequence_vistor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,78 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCE_VISTOR_HPP
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCE_VISTOR_HPP
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCErequires( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEtypename( i, d, name, default_ ) \
+((i)(name))
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEconstrained_typename( i, d \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+((i)(name))
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEmember_typename( i, d, this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEconstrained_member_typename(\
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEcall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEcomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEsubscript_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCEexplicit_conversion( ... )
+
+#endif // BOOST_GENERIC_DETAIL_TYPENAME_SEQUENCE_VISTOR_HPP

Added: sandbox/generic/include/boost/generic/detail/typename_visitor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/typename_visitor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,85 @@
+#ifndef BOOST_GENERIC_DETAIL_TYPENAME_VISITOR_HPP
+#define BOOST_GENERIC_DETAIL_TYPENAME_VISITOR_HPP
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEaxiom( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMErequires( ... )
+
+// data here is:
+// (concept_param_dets)(typename_id)
+#define BOOST_GENERIC_DETAIL_TYPENAME_MACRO( r, data, fun_id ) \
+typename BOOST_GENERIC_DETAIL_NARY_CAT \
+ ( boost_generic_detail_deduce_, fun_id, _ \
+ , BOOST_PP_SEQ_ELEM( 1, data ) \
+ ) \
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS \
+ ( BOOST_PP_SEQ_ELEM( 0, data ) ) \
+ >::type,
+
+// d here is:
+// (concept_param_dets)(function_id_seq)
+#define BOOST_GENERIC_DETAIL_TYPENAMEtypename( i, concept_map, name, default_ )\
+typedef typename ::boost::mpl::eval_if \
+ < BOOST_PP_CAT( boost_generic_detail_has_, name )< concept_map > \
+ , BOOST_PP_CAT( boost_generic_detail_get_, name ) \
+ , BOOST_PP_CAT( boost_generic_detail_deduce, name ) \
+ >::type name;
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEconstrained_typename( i, d \
+ , constraint \
+ , name \
+ , default_ \
+ ) \
+BOOST_GENERIC_DETAIL_TYPENAMEtypename( i, d, name, default_ )
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPENAMEmember_typename( i, d, this_type \
+ , name \
+ , default_ \
+ )
+
+
+// ToDo: Define
+#define BOOST_GENERIC_DETAIL_TYPENAMEconstrained_member_typename( \
+ i, d \
+ , constraint\
+ , this_type \
+ , name \
+ , default_ \
+ )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEfunction( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEmember_function( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEstatic_member_function(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEprefix_unary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEpostfix_unary_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEbinary_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEcall_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEcomma_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEarrow_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEassign_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEallocation_operator( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEdeallocation_operator(...)
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEconstructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEexplicit_constructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEdestructor( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEconversion( ... )
+
+#define BOOST_GENERIC_DETAIL_TYPENAMEexplicit_conversion( ... )
+
+#endif // BOOST_GENERIC_DETAIL_TYPENAME_VISITOR_HPP

Added: sandbox/generic/include/boost/generic/detail/types_and_enabler.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/types_and_enabler.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,56 @@
+#ifndef BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER_HPP
+#define BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER_HPP
+
+#include <type_traits>
+
+namespace boost { namespace generic { namespace detail {
+
+struct types_and_enabler_enabler_type;
+
+template< class... T >
+struct types_and_enabler;
+
+template< class... T > struct variadic_always_false : std::false_type {};
+
+// Default definition, only used when size == 0
+template< class... T >
+struct last_arg
+{
+ static_assert( variadic_always_false< T... >::value
+ , "last_arg not defined for empty template argument lists"
+ );
+};
+
+template< class Head, class... Tail >
+struct last_arg : last_arg< Tail > {};
+
+template< class OnlyElement >
+struct last_arg
+{
+ typedef OnlyElement type;
+};
+
+// ToDo: Eventually remove these checks for better compile times
+template< class... T >
+struct types_and_enabler
+{
+ static_assert( std::is_same< typename last_arg< T... >::type
+ , types_and_enabler_enabler_type
+ >::value
+ , "The last argument to types_and_enabler must be the enabler"
+ );
+};
+
+} } }
+
+// Requires at least 1 type
+#define BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER( types_in_paren_ ) \
+BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER_IMPL types_in_paren_
+
+#define BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER_IMPL( ... ) \
+::boost::generic::detail::types_and_enabler \
+< __VA_ARGS__ \
+, ::boost::generic::detail::types_and_enabler_enabler_type \
+>
+
+#endif // BOOST_GENERIC_DETAIL_TYPES_AND_ENABLER_HPP

Added: sandbox/generic/include/boost/generic/detail/unique_id.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/unique_id.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_UNIQUE_ID_HPP
+#define BOOST_GENERIC_DETAIL_UNIQUE_ID_HPP
+
+#include <boost/preprocessor/cat.hpp>
+
+// Takes a potentially unique ID as an argument
+#define BOOST_GENERIC_DETAIL_UNIQUE_ID( name ) \
+BOOST_PP_CAT \
+( BOOST_PP_CAT( BOOST_PP_CAT( detail_boost_generic_unique_id_, __COUNTER__ ) \
+ , BOOST_PP_CAT( _on_line_, __LINE__ ) \
+ ) \
+, BOOST_PP_CAT( _with_name_, name ) \
+)
+
+#define BOOST_GENERIC_DETAIL_UNIQUE_ID_() \
+BOOST_GENERIC_DETAIL_UNIQUE_ID( unnamed )
+
+#endif // BOOST_GENERIC_DETAIL_UNIQUE_ID_HPP

Added: sandbox/generic/include/boost/generic/detail/variadic_cat.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/variadic_cat.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,19 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_VARIADIC_CAT_HPP
+#define BOOST_GENERIC_DETAIL_VARIADIC_CAT_HPP
+
+// Forces rescan
+#define BOOST_GENERIC_DETAIL_VARIADIC_CAT( left_, ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_CAT_IMPL( left_, __VA_ARGS__ )
+
+#define BOOST_GENERIC_DETAIL_VARIADIC_CAT_IMPL( left_, ... ) \
+left_ ## __VA_ARGS__
+
+#endif // BOOST_GENERIC_DETAIL_VARIADIC_CAT_HPP

Added: sandbox/generic/include/boost/generic/detail/variadic_empty.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/variadic_empty.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_VARIADIC_EMPTY_HPP
+#define BOOST_GENERIC_DETAIL_VARIADIC_EMPTY_HPP
+
+#define BOOST_GENERIC_DETAIL_VARIADIC_EMPTY( ... )
+
+#endif // BOOST_GENERIC_DETAIL_VARIADIC_EMPTY_HPP

Added: sandbox/generic/include/boost/generic/detail/variadic_identity.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/variadic_identity.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY_HPP
+#define BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY_HPP
+
+#include <boost/generic/detail/variadic_empty.hpp>
+
+#define BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( ... ) \
+__VA_ARGS__ BOOST_GENERIC_DETAIL_VARIADIC_EMPTY
+
+#endif // BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY_HPP

Added: sandbox/generic/include/boost/generic/detail/variadic_stringize.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/variadic_stringize.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_HPP
+#define BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_HPP
+
+#define BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE( ... ) #__VA_ARGS__
+
+#define BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_AFTER_RESCAN( ... ) \
+BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE( __VA_ARGS__ )
+
+#endif // BOOST_GENERIC_DETAIL_VARIADIC_STRINGIZE_HPP

Added: sandbox/generic/include/boost/generic/detail/wrap.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/detail/wrap.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,15 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_DETAIL_WRAP_HPP
+#define BOOST_GENERIC_DETAIL_WRAP_HPP
+
+#define BOOST_GENERIC_DETAIL_WRAP( ... ) (__VA_ARGS__)
+#define BOOST_GENERIC_DETAIL_WRAP1( ... ) (__VA_ARGS__)
+
+#endif // BOOST_GENERIC_DETAIL_WRAP_HPP

Added: sandbox/generic/include/boost/generic/limits.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/limits.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,30 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_LIMITS_HPP
+#define BOOST_GENERIC_LIMITS_HPP
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_GENERIC_CONCEPT_MAX_CONCEPT_MAPS
+#define BOOST_GENERIC_CONCEPT_MAX_CONCEPT_MAPS 128
+#endif
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#ifndef BOOST_GENERIC_MAX_REQUIRES_EXPRESSIONS
+#define BOOST_GENERIC_MAX_REQUIRES_EXPRESSIONS 16
+#endif
+#endif
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+#ifndef BOOST_GENERIC_MAX_CONCEPT_ARITY
+#define BOOST_GENERIC_MAX_CONCEPT_ARITY 16
+#endif
+#endif
+
+#endif // BOOST_GENERIC_LIMITS_HPP

Added: sandbox/generic/include/boost/generic/std_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,18 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_HPP
+
+#include <boost/generic/std_concept/concepts.hpp>
+#include <boost/generic/std_concept/container_concepts.hpp>
+#include <boost/generic/std_concept/iterator_concepts.hpp>
+#include <boost/generic/std_concept/memory_concepts.hpp>
+#include <boost/generic/std_concept/support_concepts.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,116 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS
+
+// [concept.transform]
+#include <boost/generic/std_concept/concepts/identity_of.hpp>
+#include <boost/generic/std_concept/concepts/rvalue_of.hpp>
+
+// [concept.true]
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+// [concept.classify]
+#include <boost/generic/std_concept/concepts/lvalue_reference.hpp>
+#include <boost/generic/std_concept/concepts/rvalue_reference.hpp>
+
+// [concept.operator]
+#include <boost/generic/std_concept/concepts/has_plus.hpp>
+#include <boost/generic/std_concept/concepts/has_minus.hpp>
+#include <boost/generic/std_concept/concepts/has_multiply.hpp>
+#include <boost/generic/std_concept/concepts/has_divide.hpp>
+#include <boost/generic/std_concept/concepts/has_modulus.hpp>
+#include <boost/generic/std_concept/concepts/has_unary_plus.hpp>
+#include <boost/generic/std_concept/concepts/has_negate.hpp>
+#include <boost/generic/std_concept/concepts/has_less.hpp>
+#include <boost/generic/std_concept/concepts/has_greater.hpp>
+#include <boost/generic/std_concept/concepts/has_less_equal.hpp>
+#include <boost/generic/std_concept/concepts/has_greater_equal.hpp>
+#include <boost/generic/std_concept/concepts/has_equal_to.hpp>
+#include <boost/generic/std_concept/concepts/has_not_equal_to.hpp>
+#include <boost/generic/std_concept/concepts/has_logical_and.hpp>
+#include <boost/generic/std_concept/concepts/has_logical_or.hpp>
+#include <boost/generic/std_concept/concepts/has_logical_not.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_and.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_or.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_xor.hpp>
+#include <boost/generic/std_concept/concepts/has_complement.hpp>
+#include <boost/generic/std_concept/concepts/has_left_shift.hpp>
+#include <boost/generic/std_concept/concepts/has_right_shift.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/has_address_of.hpp>
+#include <boost/generic/std_concept/concepts/has_subscript.hpp>
+#include <boost/generic/std_concept/concepts/callable.hpp>
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_plus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_minus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_multiply_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_divide_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_modulus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_and_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_or_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_xor_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_left_shift_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_right_shift_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_preincrement.hpp>
+#include <boost/generic/std_concept/concepts/has_postincrement.hpp>
+#include <boost/generic/std_concept/concepts/has_predecrement.hpp>
+#include <boost/generic/std_concept/concepts/has_postdecrement.hpp>
+#include <boost/generic/std_concept/concepts/has_comma.hpp>
+
+// [concept.predicate]
+#include <boost/generic/std_concept/concepts/predicate.hpp>
+
+// [concept.comparison]
+#include <boost/generic/std_concept/concepts/less_than_comparable.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+#include <boost/generic/std_concept/concepts/strict_weak_order.hpp>
+#include <boost/generic/std_concept/concepts/equivalence_relation.hpp>
+
+// [concept.construct]
+#include <boost/generic/std_concept/concepts/has_constructor.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/concepts/default_constructible.hpp>
+#include <boost/generic/std_concept/concepts/trivially_default_constructible.hpp>
+
+// [concept.destruct]
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+#include <boost/generic/std_concept/concepts/has_virtual_destructor.hpp>
+#include <boost/generic/std_concept/concepts/nothrow_destructible.hpp>
+#include <boost/generic/std_concept/concepts/trivially_destructible.hpp>
+
+// [concept.copymove]
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/trivially_copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/move_assignable.hpp>
+#include <boost/generic/std_concept/concepts/copy_assignable.hpp>
+#include <boost/generic/std_concept/concepts/trivially_copy_assignable.hpp>
+#include <boost/generic/std_concept/concepts/has_swap.hpp>
+#include <boost/generic/std_concept/concepts/swappable.hpp>
+
+// [concept.memory]
+#include <boost/generic/std_concept/concepts/free_store_allocatable.hpp>
+
+// [concept.regular]
+#include <boost/generic/std_concept/concepts/semiregular.hpp>
+#include <boost/generic/std_concept/concepts/regular.hpp>
+
+// [concept.convertible]
+#include <boost/generic/std_concept/concepts/explicitly_convertible.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+
+// [concept.arithmetic]
+#include <boost/generic/std_concept/concepts/arithmetic_like.hpp>
+#include <boost/generic/std_concept/concepts/integral_like.hpp>
+#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/floating_point_like.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS

Added: sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+#line 45 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ArithmeticLike; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implArithmeticLike { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ArithmeticLike < T > > { typedef boost_generic_detail_params < T > type; }; template< cla
ss, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Regular<T>, LessThanComparable<T>, HasUnaryPlus<T>, HasNegate<T>, HasPlus<T, T>, HasMinus<T, T>, HasMultiply<T, T>, HasDivide<T, T>, HasPreincrement<T>, HasPostincrement<T>, HasPredecrement<T>, HasPostdecrement<T>, HasPlusAssign<T, const T&>, HasMinusAssign<T, const T&>, HasMultiplyAssign<T, const T&>, HasDivideAssign<T, const T&> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Regular<T>, LessThanComparable<T>, HasUnaryPlus<T>, HasNegate<T>, HasPlus<T, T>, HasMinus<T, T>, HasMultiply<T, T>, HasDivide<T, T>, HasPreincrement<T>, HasPostincrement<T>, HasPredecrement<T>, HasPo
stdecrement<T>, HasPlusAssign<T, const T&>, HasMinusAssign<T, const T&>, HasMultiplyAssign<T, const T&>, HasDivideAssign<T, const T&> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasUnaryPlus<T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasUnaryPlus<T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < Bo
ostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasNegate<T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasNegate<T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::a
nd_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasPlus<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasPlus<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost
_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasMinus<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasMinus<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetail
Params, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasMultiply<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasMultiply<T, T>::result_type, T> > {}; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasDivide<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible
<typename HasDivide<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_7 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasPreincrement<T>::result_type, T&> >::type >
 : ::boost::generic::detail::concept_is_valid < SameType<typename HasPreincrement<T>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_8 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_8 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Same
Type<typename HasPostincrement<T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasPostincrement<T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_8 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_9 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_9 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames.
.. > , typename ::boost::generic::detail::always_void < SameType<typename HasPredecrement<T>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasPredecrement<T>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_9 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_9 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_10 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_10 < boost_generic_detail_params < T > , ::boost::
generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasPostdecrement<T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasPostdecrement<T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_10 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_10 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_11 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requi
res_are_valid_11 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasPlusAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasPlusAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_11 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_11 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_12 : ::std::integral_constant< bool, false > {}; template< typename T , c
lass... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_12 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasMinusAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasMinusAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_12 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_11 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_12 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_
are_valid_13 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_13 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasMultiplyAssign<T,const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasMultiplyAssign<T,const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_13 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_12 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_13 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class
BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_14 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_14 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasDivideAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasDivideAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_14 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_13 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_14 < BoostGenericDetailParams,
 BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < ::std::intmax_t > >() ) ) ) >::type > { typedef decltype ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < ::std::intmax_t > >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGeneri
cDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < ::std::uintmax_t > >(
) ) ) ) >::type > { typedef decltype ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < ::std::uintmax_t > >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_para
ms < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < long double > >() ) ) ) >::type > { typedef decltype ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < long double > >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , cla
ss BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < Regular<T>, LessThanComparable<T>, HasUnaryPlus<T>, HasNegate<T>, HasPlus<T, T>, HasMinus<T, T>, HasMultiply<T, T>, HasDivide<T, T>, HasPreincrement<T>, HasPostincrement<T>, HasPredecrement<T>, HasPostdecrement<T>, HasPlusAssign<T, const T&>, HasMinusAssign<T, const T&>, HasMultiplyAssign<T, const T&>, HasDivideAssign<T, const T&> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Regular<T>, LessThanComparable<T>, HasUnaryPlus<T>, HasNegate<T>, HasPlus<T, T>, HasMinus<T, T>, HasMultiply<T, T>, HasDivide<T, T>, HasPreincrement<T>, HasPostincrement<T>, HasPredecrement<T>, HasPos
tdecrement<T>, HasPlusAssign<T, const T&>, HasMinusAssign<T, const T&>, HasMultiplyAssign<T, const T&>, HasDivideAssign<T, const T&> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ArithmeticLike; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::gener
ic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_14< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGener
icDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ArithmeticLike < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ArithmeticLike < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticLike ArithmeticLikeBoostGenericDetai
lImpl; template< typename T > class ArithmeticLike : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticLike:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ArithmeticLike < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticLike boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ArithmeticLike < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::inst
antiate < Regular<T>, LessThanComparable<T>, HasUnaryPlus<T>, HasNegate<T>, HasPlus<T, T>, HasMinus<T, T>, HasMultiply<T, T>, HasDivide<T, T>, HasPreincrement<T>, HasPostincrement<T>, HasPredecrement<T>, HasPostdecrement<T>, HasPlusAssign<T, const T&>, HasMinusAssign<T, const T&>, HasMultiplyAssign<T, const T&>, HasDivideAssign<T, const T&> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detai
l::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "explicit " "T" "::" "T" "( " "::std::intmax_t" " )" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "explicit " "T" "::" "T" "( " "::std::uintmax_t" " )" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "explicit " "T" "::" "T" "( " "long double" " )" ); static_assert ( ::boost::gener
ic::detail::concept_is_valid < Convertible<typename HasUnaryPlus<T>::result_type, T> >::value , "requires " "Convertible<typename HasUnaryPlus<T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasNegate<T>::result_type, T> >::value , "requires " "Convertible<typename HasNegate<T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasPlus<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasPlus<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasMinus<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasMinus<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasMultiply<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasMultiply<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typ
ename HasDivide<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasDivide<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasPreincrement<T>::result_type, T&> >::value , "requires " "SameType<typename HasPreincrement<T>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasPostincrement<T>::result_type, T> >::value , "requires " "SameType<typename HasPostincrement<T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasPredecrement<T>::result_type, T&> >::value , "requires " "SameType<typename HasPredecrement<T>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasPostdecrement<T>::result_type, T> >::value , "requires " "SameType<typename HasPostdecrement<T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasPlusAssign<T, const T&>:
:result_type, T&> >::value , "requires " "SameType<typename HasPlusAssign<T, const T&>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasMinusAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasMinusAssign<T, const T&>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasMultiplyAssign<T,const T&>::result_type, T&> >::value , "requires " "SameType<typename HasMultiplyAssign<T,const T&>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasDivideAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasDivideAssign<T, const T&>::result_type, T&>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ArithmeticLike < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_co
ncept:: ArithmeticLike < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticLike type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < float > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < float > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < float > > ::value , "Concept map does not satisfy the following requirements: " "boost::generic:
:std_concept::ArithmeticLike < float >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < float > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < double > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < double > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < double > > ::value , "Concept map does not satisfy the following requirements: " "boost::gener
ic::std_concept::ArithmeticLike < double >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < double > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < long double > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < long double > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < long double > > ::value , "Concept map does not satisfy the following requirements:
" "boost::generic::std_concept::ArithmeticLike < long double >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < long double > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < signed char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < signed char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < signed char > > ::value , "Concept map does not satisfy the following requirements:
" "boost::generic::std_concept::ArithmeticLike < signed char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < signed char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < short int > > ::value , "Concept map does not satisfy the following requirements: " "boo
st::generic::std_concept::ArithmeticLike < short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < int > > ::value , "Concept map does not satisfy the following requirements: " "boost::generic::std_c
oncept::ArithmeticLike < int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < long int > > ::value , "Concept map does not satisfy the following requirements: " "boost:
:generic::std_concept::ArithmeticLike < long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < long long int > > ::value , "Concept map does not satisfy the following requirem
ents: " "boost::generic::std_concept::ArithmeticLike < long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < long long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < unsigned char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < unsigned char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < unsigned char > > ::value , "Concept map does not satisfy the following requirem
ents: " "boost::generic::std_concept::ArithmeticLike < unsigned char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < unsigned char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < unsigned short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < unsigned short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < unsigned short int > > ::value , "Concept map does not satisfy the fol
lowing requirements: " "boost::generic::std_concept::ArithmeticLike < unsigned short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < unsigned short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < unsigned int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < unsigned int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < unsigned int > > ::value , "Concept map does not satisfy the following requirement
s: " "boost::generic::std_concept::ArithmeticLike < unsigned int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < unsigned int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < unsigned long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < unsigned long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < unsigned long int > > ::value , "Concept map does not satisfy the follow
ing requirements: " "boost::generic::std_concept::ArithmeticLike < unsigned long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < unsigned long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::ArithmeticLike < unsigned long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ArithmeticLike < unsigned long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::ArithmeticLike < unsigned long long int > > ::value , "Concept map does not sat
isfy the following requirements: " "boost::generic::std_concept::ArithmeticLike < unsigned long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::ArithmeticLike < unsigned long long int > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/arithmetic_like.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,124 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_ARITHMETIC_LIKE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_ARITHMETIC_LIKE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <cstdint>
+#endif
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/regular.hpp>
+#include <boost/generic/std_concept/concepts/less_than_comparable.hpp>
+#include <boost/generic/std_concept/concepts/has_unary_plus.hpp>
+#include <boost/generic/std_concept/concepts/has_negate.hpp>
+#include <boost/generic/std_concept/concepts/has_plus.hpp>
+#include <boost/generic/std_concept/concepts/has_minus.hpp>
+#include <boost/generic/std_concept/concepts/has_multiply.hpp>
+#include <boost/generic/std_concept/concepts/has_divide.hpp>
+#include <boost/generic/std_concept/concepts/has_preincrement.hpp>
+#include <boost/generic/std_concept/concepts/has_postincrement.hpp>
+#include <boost/generic/std_concept/concepts/has_predecrement.hpp>
+#include <boost/generic/std_concept/concepts/has_postdecrement.hpp>
+#include <boost/generic/std_concept/concepts/has_plus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_minus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_multiply_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_divide_assign.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/arithmetic_like.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.arithmetic]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ArithmeticLike)( (typename) T )
+, ( public (Regular<T>) (LessThanComparable<T>) (HasUnaryPlus<T>) (HasNegate<T>)
+ (HasPlus<T, T>) (HasMinus<T, T>) (HasMultiply<T, T>) (HasDivide<T, T>)
+ (HasPreincrement<T>) (HasPostincrement<T>) (HasPredecrement<T>)
+ (HasPostdecrement<T>) (HasPlusAssign<T, const T&>)
+ (HasMinusAssign<T, const T&>) (HasMultiplyAssign<T, const T&>)
+ (HasDivideAssign<T, const T&>)
+ )
+, ( explicit (this(T))( (::std::intmax_t) ) )
+, ( explicit (this(T))( (::std::uintmax_t) ) )
+, ( explicit (this(T))( (long double) ) )
+, ( requires Convertible<typename HasUnaryPlus<T>::result_type, T> )
+, ( requires Convertible<typename HasNegate<T>::result_type, T> )
+, ( requires Convertible<typename HasPlus<T, T>::result_type, T> )
+, ( requires Convertible<typename HasMinus<T, T>::result_type, T> )
+, ( requires Convertible<typename HasMultiply<T, T>::result_type, T> )
+, ( requires Convertible<typename HasDivide<T, T>::result_type, T> )
+, ( requires SameType<typename HasPreincrement<T>::result_type, T&> )
+, ( requires SameType<typename HasPostincrement<T>::result_type, T> )
+, ( requires SameType<typename HasPredecrement<T>::result_type, T&> )
+, ( requires SameType<typename HasPostdecrement<T>::result_type, T> )
+, ( requires SameType<typename HasPlusAssign<T, const T&>::result_type, T&> )
+, ( requires SameType<typename HasMinusAssign<T, const T&>::result_type, T&> )
+, ( requires SameType<typename HasMultiplyAssign<T,const T&>::result_type, T&> )
+, ( requires SameType<typename HasDivideAssign<T, const T&>::result_type, T&> )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( float ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( double ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( long double ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( signed char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( long long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( unsigned char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( unsigned short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( unsigned int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( unsigned long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+((boost::generic::std_concept::ArithmeticLike)( unsigned long long int ))
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+// These are included in order to bring in the concept maps for built-in types
+//#include <boost/generic/std_concept/concepts/floating_point_like.hpp>
+//#include <boost/generic/std_concept/concepts/integral_like.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_ARITHMETIC_LIKE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/callable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/callable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename... P > class Callable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implCallable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename... P > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename... P > struct boost_generic_detail_params_from_concept < Callable < T , P... > > { typedef boost_ge
neric_detail_params < T , P... > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename... P > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction
type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename... P , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , P... > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() ( ::std::declval< P& >() ... ) ) ) >::type > { typedef decltype ( ::std::declval< T& >() ( ::std::declval< P& >() ... ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostG
enericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename... P , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , P... > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type
> ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypena
mes > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename... P , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T , P... > , ::boost::generic
::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T&& >() ( ::std::declval< P&& >() ... ) ) ) >::type > { typedef decltype ( ::std::declval< T&& >() ( ::std::declval< P&& >() ... ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2result_type; template< typename T , typename... P , class BoostGenericDetailAugresult_type, class... BoostG
enericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2result_type < boost_generic_detail_params < T , P... > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type
_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >
::type , boost_generic_detail_this_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... P > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , P... > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_det
ail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... P > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , P... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , P... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Callable; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , P... > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend str
uct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , P... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_i
s_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename... P > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Callable < T , P... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , P...
> type; }; template< typename T , typename... P , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Callable < T , P... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , P... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCallable CallableBoostGenericDetailImpl; template< typename T , typename... P > class Callable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCallable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_deta
il::concept_map_ < Callable < T , P... > > ::boost_generic_concept_map_impl , T , P... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCallable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Callable < T , P... > > ::boost_generic_concept_map_impl , T , P... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , P... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_co
mpleted_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename Callable :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Callable :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_g
eneric_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "()" "( " "T& , P&..." " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "()" "( " "T& , P&..." " )" " is not convertible to " "result_type" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 <
boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "()" "( " "T&& , P&&..." " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "()" "( " "T&& , P&&..." " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename... P > struct is_concept < ::boost:: generic
:: std_concept:: Callable < T , P... > > : mpl::true_ {}; template< typename T , typename... P > struct concept_impl_of < ::boost:: generic:: std_concept:: Callable < T , P... > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCallable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename... P > struct concept_map_ < ::boost:: generic:: std_concept:: Callable < T , P... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Callable < T , P... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/callable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/callable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CALLABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CALLABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/callable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.construct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Callable)( (typename) T, (typename,,,) P )
+, ( typename result_type )
+, ( (result_type)(operator call)( (T&), (P&,,,) ) )
+, ( (result_type)(operator call)( (T&&), (P&&,,,) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CALLABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename... Args > class Constructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename... Args > struct boost_generic_detail_params_from_concept < Constructible < T , Arg
s... > > { typedef boost_generic_detail_params < T , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasConstructor<T, Args...>, NothrowDestructible<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasConstructor<T, Args...>, NothrowDestructible<T> > {}; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_
parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , Args... > , typename ::boost::generic::detail::always_void < HasConstructor<T, Args...>, NothrowDestructible<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasConstructor<T, Args...>, NothrowDestructible<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , Args... > boost_generic_detail_typename_deducers; typedef boost_g
eneric_detail_completed_concept_map Constructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Constructible < T ,
 Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , Args... > type; }; template< typename T , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Constructible < T , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConstructible ConstructibleBoostGenericDetailImpl; template< typename T , typename... Args > class Constructible : boost_generic_concept_i
mpl_detail:: boost_generic_detail_concept_implConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Constructible < T , Args... > > ::boost_generic_concept_map_impl , T , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConstructible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Constructible < T , Args... > > ::boost_generic_concept_map_impl , T , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasConstructor<T, Ar
gs...>, NothrowDestructible<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: Constructible < T , Args... > > : mpl::true_ {}; template< typename T , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: Constructible < T , Args... > > { stati
c bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConstructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: Constructible < T , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Constructible < T , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_constructor.hpp>
+#include <boost/generic/std_concept/concepts/nothrow_destructible.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.construct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Constructible)( (typename) T, (typename,,,) Args )
+, ( public (HasConstructor<T, Args...>)
+ (NothrowDestructible<T>)
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class Convertible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implConvertible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < Convertible < T , U > > { typedef boost_gener
ic_detail_params < T , U > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , typename U , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ExplicitlyConvertible< T, U > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ExplicitlyConvertible< T, U > > {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDet
ailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( typename ::std::enable_if < ::std::is_convertible < const T& , U >::value , int >::type() ) ) ) >::type > { typedef decltype ( ( typename ::std::enable_if < ::std::is_convertible < const T& , U >::value , int >::type() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generi
c_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < ExplicitlyConvertible< T, U > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ExplicitlyConvertible< T, U > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConce
ptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Convertible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > > {}; }; template<
class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Convertible < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Convertible < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap
>::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConvertible ConvertibleBoostGenericDetailImpl; template< typename T , typename U > class Convertible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConvertible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Convertible < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConvertible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Convertible < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { stru
ct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ExplicitlyConvertible< T, U > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_conce
pt_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "operator " "U" "( " "const T&" " )" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: Convertible < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: Convertible < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implConvertible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: Convertible < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef
 decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Convertible < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/convertible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONVERTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONVERTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/explicitly_convertible.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/convertible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.convertible]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Convertible)( (typename) T, (typename) U )
+, ( public ExplicitlyConvertible< T, U > )
+, ( (operator U)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_CONVERTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class CopyAssignable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implCopyAssignable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < CopyAssignable < T > > { typedef boost_generic_detail_params < T > type; }; te
mplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasAssign<T, const T&>, MoveAssignable<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasAssign<T, const T&>, MoveAssignable<T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedresult_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::t
ype > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultresult_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultresult_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename HasAssign<T, const T&>::result_type >::type > { typedef typename HasAssign<T, const T&>::result_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedresult_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passresult_type : ::b
oost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultresult_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType< result_type , typename HasAssign<T, const T&>::result_type > >::
type > : ::boost::generic::detail::concept_is_valid < SameType< result_type , typename HasAssign<T, const T&>::result_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < void****** > >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class B
oostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_0result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasAssign<T, const T&>, MoveAssignable<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasAssign<T, const T&>, MoveAssignable<T> > { typedef ::std::true_type boost_generic_detail_paren
t_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map CopyAssignable; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; type
def boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , CopyAssignable < T > > { typedef boost_generic_detail_com
pleted_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < CopyAssignable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyAssignable CopyAssignableBoostGenericDetailImpl; template< typename T > class CopyAssignable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyAssignable:: boost_generic_detail_completed_concept_map < typ
ename ::boost_generic_concept_map_detail::concept_map_ < CopyAssignable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyAssignable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < CopyAssignable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasAssign<T, const T&>, MoveAssignable<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_
concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename CopyAssignable :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename CopyAssignable :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "'
 was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType< result_type , typename HasAssign<T, const T&>::result_type > >::value , "requires " "SameType< result_type , typename HasAssign<T, const T&>::result_type >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: CopyAssignable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: CopyAssignable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyAssignable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: CopyAssignable < T > > { static bool const is_auto_concept_definition = true, is_usable = tru
e; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: CopyAssignable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/copy_assignable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_ASSIGNABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_ASSIGNABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+#include <boost/generic/std_concept/concepts/move_assignable.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/copy_assignable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (CopyAssignable)( (typename) T )
+, ( public (HasAssign<T, const T&>)
+ (MoveAssignable<T>)
+ )
+, ( typename result_type, typename HasAssign<T, const T&>::result_type )
+, ( requires SameType< result_type
+ , typename HasAssign<T, const T&>::result_type
+ >
+ )
+, ( axiom CopyPreservation( (T&) x, (T) y ) {
+ (x = y, x) == y;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_ASSIGNABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class CopyConstructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implCopyConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < CopyConstructible < T > > { typedef boost_generic_detail_params < T > ty
pe; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MoveConstructible<T>, Constructible<T, const T&> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MoveConstructible<T>, Constructible<T, const T&> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGeneri
cDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < MoveConstructible<T>, Constructible<T, const T&> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MoveConstructible<T>, Constructible<T, const T&> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map CopyConstructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept
_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , CopyConstructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < CopyCons
tructible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyConstructible CopyConstructibleBoostGenericDetailImpl; template< typename T > class CopyConstructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < CopyConstructible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl
_detail:: boost_generic_detail_concept_implCopyConstructible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < CopyConstructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MoveConstructible<T>, Constructible<T, const T&> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type:
:instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: CopyConstructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: CopyConstructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implCopyConstructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: CopyConstructible < T
> > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: CopyConstructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/copy_constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/copy_constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (CopyConstructible)( (typename) T )
+, ( public (MoveConstructible<T>) (Constructible<T, const T&>) )
+, ( axiom CopyPreservation( T x ) {
+ T(x) == x;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_COPY_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class DefaultConstructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implDefaultConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < DefaultConstructible < T > > { typedef boost_generic_detail_params
 < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Constructible<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Constructible<T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_d
etail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < Constructible<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Constructible<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map DefaultConstructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_par
ams_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , DefaultConstructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < DefaultConstructible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDe
tailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDefaultConstructible DefaultConstructibleBoostGenericDetailImpl; template< typename T > class DefaultConstructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDefaultConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < DefaultConstructible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDefaultConstructible boost_generic_detail_concept_im
pl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < DefaultConstructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Constructible<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_pa
rent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: DefaultConstructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: DefaultConstructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDefaultConstructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: DefaultConstructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_ma
p_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: DefaultConstructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/default_constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_DEFAULT_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_DEFAULT_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/default_constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.construct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (DefaultConstructible)( (typename) T )
+, ( public Constructible<T> )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_DEFAULT_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class EqualityComparable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implEqualityComparable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < EqualityComparable < T > > { typedef boost_generic_detail_params < T >
 type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasEqualTo<T, T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasEqualTo<T, T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_param
s < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() != ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() != ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { type
def ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasEqualTo<T, T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasEqualTo<T, T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map EqualityComparable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_
generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; temp
late< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , EqualityComparable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < EqualityComparable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } type
def boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEqualityComparable EqualityComparableBoostGenericDetailImpl; template< typename T > class EqualityComparable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEqualityComparable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EqualityComparable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEqualityComparable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EqualityComparable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct ins
tantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasEqualTo<T, T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_gene
ric_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "!=" "( " "const T& a , const T& b" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "!=" "( " "const T& a , const T& b" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: EqualityComparable < T > > : mpl::true_ {}; template<
 typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: EqualityComparable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEqualityComparable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: EqualityComparable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: EqualityComparable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/equality_comparable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUALITY_COMPARABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUALITY_COMPARABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_equal_to.hpp>
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/equality_comparable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.comparison]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (EqualityComparable)( (typename) T ), ( public HasEqualTo<T, T> )
+, ( (bool)(operator not_equal_to)( (const T&) a, (const T&) b ), {
+ return !( a == b );
+ }
+ )
+, ( axiom Consistency( T a, T b ) {
+ (a == b) == !(a != b);
+ }
+ )
+, ( axiom Reflexivity( T a ) {
+ a == a;
+ }
+ )
+, ( axiom Symmetry( T a, T b ) {
+ if (a == b)
+ b == a;
+ }
+ )
+, ( axiom Transitivity( T a, T b, T c ) {
+ if (a == b && b == c)
+ a == c;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUALITY_COMPARABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename F , typename T > class EquivalenceRelation; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implEquivalenceRelation { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename F , typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename F , typename T > struct boost_generic_detail_params_from_concept < EquivalenceRelation < F , T >
> { typedef boost_generic_detail_params < F , T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename F , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Predicate<F, T, T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Predicate<F, T, T> > {}; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; temp
late< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > , typename ::boost::generic::detail::always_void < Predicate<F, T, T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Predicate<F, T, T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , F , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map EquivalenceRelation; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_conc
ept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < F , T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , EquivalenceRelation < F , T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , T > type; }; template< typename F , typename T , class BoostGenericDetailConceptMap > struc
t boost_generic_detail_is_valid_ < EquivalenceRelation < F , T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEquivalenceRelation EquivalenceRelationBoostGenericDetailImpl; template< typename F , typename T > class EquivalenceRelation : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEquivalenceRelation:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EquivalenceRelation < F , T
> > ::boost_generic_concept_map_impl , F , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEquivalenceRelation boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EquivalenceRelation < F , T > > ::boost_generic_concept_map_impl , F , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < F , T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Predicate<F, T, T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_
concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename F , typename T > struct is_concept < ::boost:: generic:: std_concept:: EquivalenceRelation < F , T > > : mpl::true_ {}; template< typename F , typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: EquivalenceRelation < F , T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEquivalenceRelation type; }; } } } namespace boost_generic_concept_map
_detail { template< typename F , typename T > struct concept_map_ < ::boost:: generic:: std_concept:: EquivalenceRelation < F , T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: EquivalenceRelation < F , T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/equivalence_relation.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUIVALENCE_RELATION_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUIVALENCE_RELATION_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/predicate.hpp>
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/equivalence_relation.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// TODO possibly make this not auto (it's auto in N2914)
+
+// [concept.comparison]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (EquivalenceRelation)( (typename) F, (typename) T )
+, ( public Predicate<F, T, T> )
+
+, ( axiom Reflexivity(F f, T a) { f(a, a) == true; } )
+
+, ( axiom Symmetry(F f, T a, T b) {
+ if (f(a, b))
+ f(b, a) == true;
+ }
+ )
+
+, ( axiom Transitivity(F f, T a, T b, T c) {
+ if (f(a, b) && f(b, c))
+ f(a, c) == true;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EQUIVALENCE_RELATION_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class ExplicitlyConvertible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implExplicitlyConvertible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < ExplicitlyConvertible < T
 , U > > { typedef boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( typename ::boost::generic::detail::identity_unless_void < U >::type ) ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ( typename ::boost::generic::detail::identity_unless_void < U >::
type ) ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::bo
ost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ExplicitlyConvertible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_complete
d_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ExplicitlyConvertible < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ExplicitlyConvertible < T , U > , BoostGenericDetailConceptMap > : boost_generic_deta
il_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implExplicitlyConvertible ExplicitlyConvertibleBoostGenericDetailImpl; template< typename T , typename U > class ExplicitlyConvertible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implExplicitlyConvertible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ExplicitlyConvertible < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_
detail_concept_implExplicitlyConvertible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ExplicitlyConvertible < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts "
 "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "explicit operator " "U" "( " "const T&" " )" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: ExplicitlyConvertible < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: ExplicitlyConvertible < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implExplic
itlyConvertible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: ExplicitlyConvertible < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ExplicitlyConvertible < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/explicitly_convertible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EXPLICITLY_CONVERTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EXPLICITLY_CONVERTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/explicitly_convertible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.convertible]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ExplicitlyConvertible)( (typename) T, (typename) U )
+, ( explicit (operator U)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_EXPLICITLY_CONVERTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,6 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class FloatingPointLike; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implFloatingPointLike { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < FloatingPointLike < T > > { typedef boost_generic_detail_params < T > type; }; temp
late< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ArithmeticLike<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ArithmeticLike<T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_conce
pts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ArithmeticLike<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ArithmeticLike<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map FloatingPointLike; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boo
st::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , FloatingPointLike < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < FloatingPointLike < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boo
st_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointLike FloatingPointLikeBoostGenericDetailImpl; template< typename T > class FloatingPointLike : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointLike:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FloatingPointLike < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointLike boost_generic_detail_concept_impl; typedef typename boost_generic_detail_c
oncept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FloatingPointLike < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ArithmeticLike<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unabl
e to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: FloatingPointLike < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: FloatingPointLike < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointLike type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::FloatingPointLike < float > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::FloatingPointLike < float > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::FloatingPointLike < float > > ::value , "Concept map does not satisfy the following requirements: " "boost:
:generic::std_concept::FloatingPointLike < float >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::FloatingPointLike < float > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::FloatingPointLike < double > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::FloatingPointLike < double > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::FloatingPointLike < double > > ::value , "Concept map does not satisfy the following requirements: " "boo
st::generic::std_concept::FloatingPointLike < double >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::FloatingPointLike < double > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::FloatingPointLike < long double > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::FloatingPointLike < long double > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::FloatingPointLike < long double > > ::value , "Concept map does not satisfy the following requi
rements: " "boost::generic::std_concept::FloatingPointLike < long double >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::FloatingPointLike < long double > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/floating_point_like.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,50 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FLOATING_POINT_LIKE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FLOATING_POINT_LIKE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/concepts/arithmetic_like.hpp>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/floating_point_like.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.arithmetic]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (FloatingPointLike)( (typename) T )
+, ( public ArithmeticLike<T> )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::FloatingPointLike)( float ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::FloatingPointLike)( double ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::FloatingPointLike)( long double ) )
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FLOATING_POINT_LIKE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class FreeStoreAllocatable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implFreeStoreAllocatable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < FreeStoreAllocatable < T > > { typedef boost_generic_detail_params
 < T > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new , T , std::size_t >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new , T , std:
:size_t >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < de
cltype ( ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete , T , void* >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete , T , void* >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_t
ype type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new[] , T , std::size_t >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new[] , T , std::size_t >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTyp
enames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_4 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_4 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete[] , T , void* >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete[] , T , void* >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypename
s > struct boost_generic_detail_return_type_4 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_5 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_5 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new , T , std::size_t
 , const std::nothrow_t& >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new , T , std::size_t , const std::nothrow_t& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_5 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_6 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct bo
ost_generic_detail_return_type_impl_6 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new[] , T , std::size_t , const std::nothrow_t& >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::allocation_operator_fun < ::boost::generic::detail:: allocation_operator_tag_new[] , T , std::size_t , const std::nothrow_t& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_6 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boos
t::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_7 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_7 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete , T , void* , const std::nothrow_t& >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete , T , void* , const std::nothrow_t& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypen
ames > struct boost_generic_detail_return_type_7 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_8 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_8 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete[] , T ,
 void* , const std::nothrow_t& >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::deallocation_operator_fun < ::boost::generic::detail:: deallocation_operator_tag_delete[] , T , void* , const std::nothrow_t& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_8 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< cla
ss BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map FreeStoreAllocatable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boo
st_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void* > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::g
eneric::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void* > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_ma
p , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void* > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void* > , ::boost::generic::detail::is_not_dummy_type < typenam
e boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_complete
d_concept_map_from_concept < BoostGenericDetailConceptMap , FreeStoreAllocatable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < FreeStoreAllocatable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFreeStoreAllocatable FreeStoreAllocatableBoostGenericDetailImpl; template< typename T > class FreeStoreA
llocatable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFreeStoreAllocatable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FreeStoreAllocatable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFreeStoreAllocatable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FreeStoreAllocatable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generi
c_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void*" " " "T" "::operator " "new" "( " "std::size_t size" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_det
ail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void* > >::value , "the return type of " "T" "::operator " "new" "( " "std::size_t size" " )" " is not convertible to " "void*" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "T" "::operator " "delete" "( " "void*" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_ge
neric_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "T" "::operator " "delete" "( " "void*" " )" " is not convertible to " "void" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void*" " " "T" "::operator " "new[]" "( " "std::size_t size" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3
< boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void* > >::value , "the return type of " "T" "::operator " "new[]" "( " "std::size_t size" " )" " is not convertible to " "void*" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "T" "::operator " "delete[]" "( " "void* ptr" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_deta
il_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "T" "::operator " "delete[]" "( " "void* ptr" " )" " is not convertible to " "void" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void*" " " "T" "::operator " "new" "( " "std::size_t size , const std::nothrow_t&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_conc
ept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void* > >::value , "the return type of " "T" "::operator " "new" "( " "std::size_t size , const std::nothrow_t&" " )" " is not convertible to " "void*" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void*" " " "T" "::operator " "new[]" "( " "std::size_t size , const std::nothrow_t&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost:
:generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void* > >::value , "the return type of " "T" "::operator " "new[]" "( " "std::size_t size , const std::nothrow_t&" " )" " is not convertible to " "void*" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "T" "::operator " "delete" "( " "void* ptr , const std::n
othrow_t&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "T" "::operator " "delete" "( " "void* ptr , const std::nothrow_t&" " )" " is not convertible to " "void" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "T
" "::operator " "delete[]" "( " "void* ptr , const std::nothrow_t&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "T" "::operator " "delete[]" "( " "void* ptr , const std::nothrow_t&" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: FreeStoreAllocatable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boos
t:: generic:: std_concept:: FreeStoreAllocatable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFreeStoreAllocatable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: FreeStoreAllocatable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: FreeStoreAllocatable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/free_store_allocatable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,74 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FREE_STORE_ALLOCATABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FREE_STORE_ALLOCATABLE_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <cstddef>
+#include <new>
+#endif
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/free_store_allocatable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.memory]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (FreeStoreAllocatable)( (typename) T )
+, ( (void*)(this(T) operator new)( (std::size_t) size ) )
+, ( (void)(this(T) operator delete)( (void*) ) )
+, ( (void*)(this(T) operator new_array)( (std::size_t) size ), {
+ return T::operator new(size);
+ }
+ )
+, ( (void)(this(T) operator delete_array)( (void*) ptr ), {
+ return T::operator delete(ptr);
+ }
+ )
+, ( (void*)(this(T) operator new)( (std::size_t) size, (const std::nothrow_t&) ), {
+ try {
+ return T::operator new(size);
+ } catch(...) {
+ return 0;
+ }
+ }
+ )
+, ( (void*)(this(T) operator new_array)( (std::size_t) size, (const std::nothrow_t&) ), {
+ try {
+ return T::operator new[](size);
+ } catch(...) {
+ return 0;
+ }
+ }
+ )
+, ( (void)(this(T) operator delete)( (void*) ptr, (const std::nothrow_t&) ), {
+ T::operator delete(ptr);
+ }
+ )
+, ( (void)(this(T) operator delete_array)( (void*) ptr, (const std::nothrow_t&) ), {
+ T::operator delete[](ptr);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_FREE_STORE_ALLOCATABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasAddressOf; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasAddressOf { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasAddressOf < T > > { typedef boost_generic_detail_params < T > type; }; template
< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGen
ericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( & ::std::declval< T& >() ) ) >::type > { typedef decltype ( & ::std::declval< T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::
identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1
result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams,
 class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDe
tailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasAddressOf; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_de
tail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename b
oost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasAddressOf < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasAddressOf < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is
_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAddressOf HasAddressOfBoostGenericDetailImpl; template< typename T > class HasAddressOf : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAddressOf:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasAddressOf < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAddressOf boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_complet
ed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasAddressOf < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::de
tail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasAddressOf :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasAddressOf :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "&" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template
boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "&" "( " "T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasAddressOf < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasAddressOf < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAddress
Of type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasAddressOf < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasAddressOf < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_address_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ADDRESS_OF_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ADDRESS_OF_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_address_of.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasAddressOf)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator address_of)( (T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ADDRESS_OF_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasAssign < T , U > > { typedef boost_generic_det
ail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; templa
te< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() = ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() = ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , bo
ost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDeta
ilConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_<
::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generi
c_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_g
eneric_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_d
etail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptM
ap > struct boost_generic_detail_is_valid_ < HasAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAssign HasAssignBoostGenericDetailImpl; template< typename T , typename U > class HasAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasAssign < T , U > > ::boost_generic_concept_map_impl , T , U > {
typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be
substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typename
s >::type >::value , "requires " "result_type" " " "T" "::operator " "=" "( " "U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "T" "::operator " "=" "( " "U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasAssign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of
< ::boost:: generic:: std_concept:: HasAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(this(T) operator assign)( (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitAnd; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitAnd { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitAnd < T , U > > { typedef boost_generic_det
ail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; templa
te< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() & ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() & ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDet
ailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; templa
te< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost
::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class =
void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitAnd; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitAnd < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class
BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitAnd < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAnd HasBitAndBoostGenericDetailImpl; template< typename T , typename U > class HasBitAnd : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAnd:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitAnd < T , U > > ::boost_generic_con
cept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAnd boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitAnd < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value ,
 "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitAnd :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitAnd :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boo
st_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "&" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "&" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitAnd < T , U > > : mpl::true_ {}; template< ty
pename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitAnd < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAnd type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitAnd < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitAnd < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_and.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitAnd)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_and)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitAndAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitAndAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitAndAssign < T , U > > { typedef
 boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deducti
on type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() &= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() &= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTyp
enames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< cl
ass BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::gene
ric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void >
 struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitAndAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitAndAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U ,
class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitAndAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAndAssign HasBitAndAssignBoostGenericDetailImpl; template< typename T , typename U > class HasBitAndAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAndAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBi
tAndAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAndAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitAndAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_ma
p ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitAndAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitAndAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_gener
ic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "&=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "&=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitAnd
Assign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitAndAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitAndAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitAndAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitAndAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_and_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_and_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitAndAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_and_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_AND_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitOr; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitOr { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitOr < T , U > > { typedef boost_generic_detail
_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template<
 class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() | ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() | ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::g
eneric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = voi
d > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitOr; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_t
ype >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept
_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitOr < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class Boost
GenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitOr < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOr HasBitOrBoostGenericDetailImpl; template< typename T , typename U > class HasBitOr : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOr:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitOr < T , U > > ::boost_generic_concept_map_im
pl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOr boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitOr < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters
unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitOr :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitOr :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_deta
il_typenames >::type >::value , "requires " "result_type" " operator " "|" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "|" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitOr < T , U > > : mpl::true_ {}; template< typename T , typen
ame U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitOr < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOr type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitOr < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitOr < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_or.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitOr)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_or)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitOrAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitOrAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitOrAssign < T , U > > { typedef bo
ost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction
type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() |= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() |= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypena
mes >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class
 BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic
::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > st
ruct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitOrAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_t
ype >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept
_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitOrAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class
 BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitOrAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOrAssign HasBitOrAssignBoostGenericDetailImpl; template< typename T , typename U > class HasBitOrAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOrAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitOrAssign
< T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOrAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitOrAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_gen
eric_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitOrAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitOrAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_compl
eted_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "|=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "|=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitOrAssign < T , U >
> : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitOrAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitOrAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitOrAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitOrAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_or_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_or_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitOrAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_or_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_OR_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitXor; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitXor { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitXor < T , U > > { typedef boost_generic_det
ail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; templa
te< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() ^ ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() ^ ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDet
ailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; templa
te< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost
::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class =
void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitXor; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitXor < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class
BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitXor < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXor HasBitXorBoostGenericDetailImpl; template< typename T , typename U > class HasBitXor : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXor:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitXor < T , U > > ::boost_generic_con
cept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXor boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitXor < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value ,
 "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitXor :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitXor :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boo
st_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "^" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "^" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitXor < T , U > > : mpl::true_ {}; template< ty
pename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitXor < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXor type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitXor < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitXor < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_xor.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitXor)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_xor)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasBitXorAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasBitXorAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasBitXorAssign < T , U > > { typedef
 boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deducti
on type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() ^= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() ^= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTyp
enames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< cl
ass BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::gene
ric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void >
 struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasBitXorAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasBitXorAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U ,
class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasBitXorAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXorAssign HasBitXorAssignBoostGenericDetailImpl; template< typename T , typename U > class HasBitXorAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXorAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBi
tXorAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXorAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasBitXorAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_ma
p ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasBitXorAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasBitXorAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_gener
ic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "^=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "^=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasBitXor
Assign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasBitXorAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasBitXorAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasBitXorAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasBitXorAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_bit_xor_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_bit_xor_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasBitXorAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator bit_xor_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_BIT_XOR_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasComma; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasComma { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasComma < T , U > > { typedef boost_generic_detail
_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template<
 class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() , ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() , ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::g
eneric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = voi
d > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasComma; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_t
ype >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept
_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasComma < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class Boost
GenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasComma < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComma HasCommaBoostGenericDetailImpl; template< typename T , typename U > class HasComma : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComma:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasComma < T , U > > ::boost_generic_concept_map_im
pl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComma boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasComma < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters
unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasComma :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasComma :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_deta
il_typenames >::type >::value , "requires " "result_type" " operator ,( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of operator ,( " "const T& , const U&" " ) " "is not convertible to " "result_type" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasComma < T , U > > : mpl::true_ {}; template< typename T , typename U > str
uct concept_impl_of < ::boost:: generic:: std_concept:: HasComma < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComma type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasComma < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasComma < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_comma.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMMA_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMMA_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_comma.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasComma)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator comma)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMMA_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasComplement; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasComplement { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasComplement < T > > { typedef boost_generic_detail_params < T > type; }; templ
ate< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class Boost
GenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ~ ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ~ ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > ,
 ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_imp
l_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGener
icDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class
 BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasComplement; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename
boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_t
ype < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasComplement < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasComplement < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost
_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComplement HasComplementBoostGenericDetailImpl; template< typename T > class HasComplement : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComplement:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasComplement < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasComplement boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boos
t_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasComplement < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typ
edef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasComplement :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasComplement :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "~" "( " "const T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generi
c_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "~" "( " "const T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasComplement < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasComplement < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: bo
ost_generic_detail_concept_implHasComplement type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasComplement < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasComplement < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_complement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMPLEMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMPLEMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_complement.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasComplement)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator complement)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_COMPLEMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename... Args > class HasConstructor; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasConstructor { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename... Args > struct boost_generic_detail_params_from_concept < HasConstructor < T ,
Args... > > { typedef boost_generic_detail_params < T , Args... > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ( ::boost::generic::detail::constructor_fun < T , ::boost::generic::detail::type_list < Args... > >() ) ) ) >::type > { typedef decltype ( ( ::boost::generic::detail::constru
ctor_fun < T , ::boost::generic::detail::type_list < Args... > >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_
detail_params < T , Args... > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasConstructor; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::
generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasConstructor < T , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , Args... > type; }; template< typename T , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasCon
structor < T , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasConstructor HasConstructorBoostGenericDetailImpl; template< typename T , typename... Args > class HasConstructor : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasConstructor:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasConstructor < T , Args... > > ::boost_generic_concept_map_impl , T , Arg
s... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasConstructor boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasConstructor < T , Args... > > ::boost_generic_concept_map_impl , T , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeed
ed::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "T" "::" "T" "( " "Args..." " )" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: HasConstructor < T , Args... > > : mpl::true_ {}; template< typename T , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: HasConstructor < T , Args... > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_g
eneric_concept_impl_detail:: boost_generic_detail_concept_implHasConstructor type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: HasConstructor < T , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasConstructor < T , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_constructor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_CONSTRUCTOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_CONSTRUCTOR_HPP
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_constructor.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.construct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasConstructor)( (typename) T, (typename,,,) Args )
+, ( (this(T))( (Args,,,) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_CONSTRUCTOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasDereference; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasDereference { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasDereference < T > > { typedef boost_generic_detail_params < T > type; }; te
mplate< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class Bo
ostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( * ::std::declval< T& >() ) ) >::type > { typedef decltype ( * ::std::declval< T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost:
:mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_de
duce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailP
arams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( * ::std::declval< T&& >() ) ) >::type > { typedef
 decltype ( * ::std::declval< T&& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDeta
ilAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_ded
uce_2result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struc
t boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_
pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasDereference; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void >
 boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_g
eneric_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasDereference < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasDereference < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDe
tailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDereference HasDereferenceBoostGenericDetailImpl; template< typename T > class HasDereference : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDereference:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDereference < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDereference boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_ma
p_ < HasDereference < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames;
 static_assert ( ::boost::generic::detail::is_not_same < typename HasDereference :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasDereference :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "*" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_complete
d_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "*" "( " "T&" " )" " is not convertible to " "result_type" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "*" "( " "T&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_
map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "*" "( " "T&&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasDereference < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasDereference < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDereference type; }; } } } namespace boost_generic_concept_map_detail { templa
te< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasDereference < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasDereference < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_dereference.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DEREFERENCE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DEREFERENCE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_dereference.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasDereference)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator dereference)( (T&) ) )
+, ( (result_type)(operator dereference)( (T&&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DEREFERENCE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasDestructor; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasDestructor { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasDestructor < T > > { typedef boost_generic_detail_params < T > type; }; templ
ate< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::destructor_fun < T >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::destructor_fun < T >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1
: ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_conce
pt_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasDestructor; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_typ
e < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasDestructor < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasDestructor < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_m
ap_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDestructor HasDestructorBoostGenericDetailImpl; template< typename T > class HasDestructor : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDestructor:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDestructor < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDestructor boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDestructor < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concep
t_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detai
l_typenames >::type >::value , "requires " "T" "::~" "T" "()" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasDestructor < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasDestructor < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDestructor type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasDestructor < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_conce
pt:: HasDestructor < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_destructor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DESTRUCTOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DESTRUCTOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_destructor.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.destruct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasDestructor)( (typename) T )
+, ( (this(T) destroy)() )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DESTRUCTOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasDivide; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasDivide { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasDivide < T , U > > { typedef boost_generic_det
ail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; templa
te< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() / ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() / ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDet
ailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; templa
te< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost
::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class =
void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasDivide; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasDivide < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class
BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasDivide < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivide HasDivideBoostGenericDetailImpl; template< typename T , typename U > class HasDivide : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivide:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDivide < T , U > > ::boost_generic_con
cept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivide boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDivide < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value ,
 "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasDivide :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasDivide :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boo
st_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "/" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "/" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasDivide < T , U > > : mpl::true_ {}; template< ty
pename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasDivide < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivide type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasDivide < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasDivide < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_divide.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_divide.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasDivide)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator divide)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasDivideAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasDivideAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasDivideAssign < T , U > > { typedef
 boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deducti
on type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() /= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() /= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTyp
enames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< cl
ass BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::gene
ric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void >
 struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasDivideAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: resu
lt_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_con
cept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasDivideAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U ,
class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasDivideAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivideAssign HasDivideAssignBoostGenericDetailImpl; template< typename T , typename U > class HasDivideAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivideAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDi
videAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivideAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasDivideAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_ma
p ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasDivideAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasDivideAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_gener
ic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "/=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "/=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasDivide
Assign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasDivideAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasDivideAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasDivideAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasDivideAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_divide_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_divide_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasDivideAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator divide_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_DIVIDE_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasEqualTo; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasEqualTo { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasEqualTo < T , U > > { typedef boost_generic_
detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() == ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() == ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericD
etailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeede
d; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasEqualTo; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_
completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasEqualTo < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_
is_valid_ < HasEqualTo < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasEqualTo HasEqualToBoostGenericDetailImpl; template< typename T , typename U > class HasEqualTo : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasEqualTo:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasEqualTo < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_conce
pt_impl_detail:: boost_generic_detail_concept_implHasEqualTo boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasEqualTo < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent c
oncepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "==" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_param
s, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "==" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasEqualTo < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasEqualTo < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasEqualTo type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasEqualTo < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > str
uct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasEqualTo < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_equal_to.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_EQUAL_TO_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_EQUAL_TO_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_equal_to.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasEqualTo)( (typename) T, (typename) U )
+, ( (bool)(operator equal_to)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_EQUAL_TO_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasGreater; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasGreater { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasGreater < T , U > > { typedef boost_generic_
detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() > ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() > ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDet
ailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded;
 }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasGreater; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_co
mpleted_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasGreater < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is
_valid_ < HasGreater < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreater HasGreaterBoostGenericDetailImpl; template< typename T , typename U > class HasGreater : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreater:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasGreater < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept
_impl_detail:: boost_generic_detail_concept_implHasGreater boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasGreater < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent con
cepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " ">" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params,
boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " ">" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasGreater < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasGreater < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreater type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasGreater < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct
instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasGreater < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_greater.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_greater.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasGreater)( (typename) T, (typename) U )
+, ( (bool)(operator greater)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasGreaterEqual; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasGreaterEqual { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasGreaterEqual < T , U > > { typedef
 boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() >= ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() >= ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , clas
s BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_pare
nt_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasGreaterEqual; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< b
oost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasGreaterEqual < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > str
uct boost_generic_detail_is_valid_ < HasGreaterEqual < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreaterEqual HasGreaterEqualBoostGenericDetailImpl; template< typename T , typename U > class HasGreaterEqual : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreaterEqual:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasGreaterEqual < T , U > > ::boost_generic_c
oncept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreaterEqual boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasGreaterEqual < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succ
eeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " ">=" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_
generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " ">=" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasGreaterEqual < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasGreaterEqual < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasGreaterEqual type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasGreaterEqual < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct bo
ost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasGreaterEqual < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_greater_equal.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_EQUAL_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_EQUAL_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_greater_equal.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasGreaterEqual)( (typename) T, (typename) U )
+, ( (bool)(operator greater_equal)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_GREATER_EQUAL_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLeftShift; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLeftShift { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLeftShift < T , U > > { typedef boost_ge
neric_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type;
}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() << ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() << ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, Boos
tGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > )
; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames
> , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams
 , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLeftShift; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_d
educers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail
_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLeftShift < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , ty
pename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasLeftShift < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShift HasLeftShiftBoostGenericDetailImpl; template< typename T , typename U > class HasLeftShift : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShift:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLeftSh
ift < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShift boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLeftShift < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_gen
eric_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasLeftShift :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasLeftShift :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed
_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "<<" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "<<" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: Ha
sLeftShift < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLeftShift < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShift type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLeftShift < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLeftShift < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_left_shift.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLeftShift)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator left_shift)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLeftShiftAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLeftShiftAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLeftShiftAssign < T , U > >
{ typedef boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::n
o_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() <<= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() <<= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGener
icDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; t
emplate< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::
boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , cla
ss = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLeftShiftAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_d
educers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail
_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLeftShiftAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename
T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasLeftShiftAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShiftAssign HasLeftShiftAssignBoostGenericDetailImpl; template< typename T , typename U > class HasLeftShiftAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShiftAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_
map_detail::concept_map_ < HasLeftShiftAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShiftAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLeftShiftAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert(
boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasLeftShiftAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasLeftShiftAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template b
oost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "<<=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "<<=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_conc
ept < ::boost:: generic:: std_concept:: HasLeftShiftAssign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLeftShiftAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLeftShiftAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLeftShiftAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLeftShiftAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_left_shift_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_left_shift_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLeftShiftAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator left_shift_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LEFT_SHIFT_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLess; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLess { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLess < T , U > > { typedef boost_generic_detail_pa
rams < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() < ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() < ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams
 , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; templ
ate< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLess; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_conc
ept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLess < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasLe
ss < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLess HasLessBoostGenericDetailImpl; template< typename T , typename U > class HasLess : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLess:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLess < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_deta
il_concept_implHasLess boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLess < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a re
ference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "<" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type
, bool > >::value , "the return type of " "operator " "<" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasLess < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLess < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLess type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLess < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::
detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLess < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_less.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_less.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLess)( (typename) T, (typename) U )
+, ( (bool)(operator less)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLessEqual; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLessEqual { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLessEqual < T , U > > { typedef boost_ge
neric_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() <= ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() <= ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGe
nericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_su
cceeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLessEqual; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic
_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLessEqual < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_gener
ic_detail_is_valid_ < HasLessEqual < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLessEqual HasLessEqualBoostGenericDetailImpl; template< typename T , typename U > class HasLessEqual : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLessEqual:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLessEqual < T , U > > ::boost_generic_concept_map_impl , T , U > { typed
ef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLessEqual boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLessEqual < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be
 substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "<=" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map ,
boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "<=" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasLessEqual < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLessEqual < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLessEqual type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLessEqual < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class Bo
ostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLessEqual < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_less_equal.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_EQUAL_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_EQUAL_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_less_equal.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLessEqual)( (typename) T, (typename) U )
+, ( (bool)(operator less_equal)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LESS_EQUAL_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLogicalAnd; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLogicalAnd { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLogicalAnd < T , U > > { typedef boost
_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() && ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() && ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class Boos
tGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub
_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLogicalAnd; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_gen
eric_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLogicalAnd < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_
generic_detail_is_valid_ < HasLogicalAnd < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalAnd HasLogicalAndBoostGenericDetailImpl; template< typename T , typename U > class HasLogicalAnd : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalAnd:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLogicalAnd < T , U > > ::boost_generic_concept_map_impl , T ,
U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalAnd boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLogicalAnd < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters
 unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "&&" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_c
oncept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "&&" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasLogicalAnd < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLogicalAnd < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalAnd type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLogicalAnd < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; t
emplate< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLogicalAnd < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_and.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_AND_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_AND_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_logical_and.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLogicalAnd)( (typename) T, (typename) U )
+, ( (bool)(operator logical_and)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_AND_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasLogicalNot; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLogicalNot { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasLogicalNot < T > > { typedef boost_generic_detail_params < T > type; }; templ
ate< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ! ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ! ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic
_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent
_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLogicalNot; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_re
turn_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLogicalNot < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasLogicalNot < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class
BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalNot HasLogicalNotBoostGenericDetailImpl; template< typename T > class HasLogicalNot : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalNot:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLogicalNot < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalNot boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < type
name ::boost_generic_concept_map_detail::concept_map_ < HasLogicalNot < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_d
ummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "!" "( " "const T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "!" "( " "const T&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { temp
late< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasLogicalNot < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLogicalNot < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalNot type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasLogicalNot < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLogicalNot < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_not.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_NOT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_NOT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_logical_not.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLogicalNot)( (typename) T )
+, ( (bool)(operator logical_not)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_NOT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasLogicalOr; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasLogicalOr { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasLogicalOr < T , U > > { typedef boost_ge
neric_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() || ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() || ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGe
nericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_su
cceeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasLogicalOr; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic
_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasLogicalOr < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_gener
ic_detail_is_valid_ < HasLogicalOr < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalOr HasLogicalOrBoostGenericDetailImpl; template< typename T , typename U > class HasLogicalOr : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalOr:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLogicalOr < T , U > > ::boost_generic_concept_map_impl , T , U > { typed
ef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalOr boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasLogicalOr < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be
 substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "||" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map ,
boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "||" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasLogicalOr < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasLogicalOr < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasLogicalOr type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasLogicalOr < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class Bo
ostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasLogicalOr < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_logical_or.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_OR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_OR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_logical_or.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasLogicalOr)( (typename) T, (typename) U )
+, ( (bool)(operator logical_or)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_LOGICAL_OR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasMinus; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasMinus { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasMinus < T , U > > { typedef boost_generic_detail
_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template<
 class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() - ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() - ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::g
eneric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = voi
d > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasMinus; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_t
ype >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept
_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasMinus < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class Boost
GenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasMinus < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinus HasMinusBoostGenericDetailImpl; template< typename T , typename U > class HasMinus : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinus:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMinus < T , U > > ::boost_generic_concept_map_im
pl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinus boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMinus < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters
unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasMinus :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasMinus :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_deta
il_typenames >::type >::value , "requires " "result_type" " operator " "-" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "-" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasMinus < T , U > > : mpl::true_ {}; template< typename T , typen
ame U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasMinus < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinus type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasMinus < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasMinus < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_minus.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_minus.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasMinus)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator minus)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasMinusAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasMinusAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasMinusAssign < T , U > > { typedef bo
ost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction
type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() -= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() -= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypena
mes >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class
 BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic
::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > st
ruct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasMinusAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_t
ype >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept
_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasMinusAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class
 BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasMinusAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinusAssign HasMinusAssignBoostGenericDetailImpl; template< typename T , typename U > class HasMinusAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinusAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMinusAssign
< T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinusAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMinusAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_gen
eric_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasMinusAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasMinusAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_compl
eted_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "-=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "-=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasMinusAssign < T , U >
> : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasMinusAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMinusAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasMinusAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasMinusAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_minus_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_minus_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasMinusAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator minus_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MINUS_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasModulus; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasModulus { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasModulus < T , U > > { typedef boost_generic_
detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; tem
plate< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() % ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() % ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGeneric
DetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; tem
plate< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::bo
ost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class
 = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasModulus; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers::
result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed
_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasModulus < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , c
lass BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasModulus < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulus HasModulusBoostGenericDetailImpl; template< typename T , typename U > class HasModulus : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulus:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasModulus < T , U > > ::boost_
generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulus boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasModulus < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succe
eded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasModulus :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasModulus :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_det
ail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "%" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "%" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasModulus < T , U > > : mpl::true_
{}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasModulus < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulus type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasModulus < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasModulus < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_modulus.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasModulus)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator modulus)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasModulusAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasModulusAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasModulusAssign < T , U > > { type
def boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_dedu
ction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() %= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() %= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::g
eneric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = voi
d > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasModulusAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers::
result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed
_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasModulusAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename
 U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasModulusAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulusAssign HasModulusAssignBoostGenericDetailImpl; template< typename T , typename U > class HasModulusAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulusAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_ma
p_ < HasModulusAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulusAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasModulusAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_complet
ed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasModulusAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasModulusAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_
1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "%=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "%=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_conc
ept:: HasModulusAssign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasModulusAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasModulusAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasModulusAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasModulusAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_modulus_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_modulus_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasModulusAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator modulus_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MODULUS_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasMultiply; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasMultiply { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasMultiply < T , U > > { typedef boost_gener
ic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; };
template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() * ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() * ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGene
ricDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); };
template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , :
:boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , cl
ass = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasMultiply; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducer
s:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_compl
eted_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasMultiply < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename
U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasMultiply < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiply HasMultiplyBoostGenericDetailImpl; template< typename T , typename U > class HasMultiply : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiply:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMultiply < T , U >
> ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiply boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMultiply < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_par
ent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasMultiply :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasMultiply :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , bo
ost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "*" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "*" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasMultiply < T , U >
> : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasMultiply < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiply type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasMultiply < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasMultiply < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_multiply.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasMultiply)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator multiply)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasMultiplyAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasMultiplyAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasMultiplyAssign < T , U > > { t
ypedef boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_d
eduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() *= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() *= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDet
ailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; templa
te< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost
::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class =
void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasMultiplyAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducer
s:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_compl
eted_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasMultiplyAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typ
ename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasMultiplyAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiplyAssign HasMultiplyAssignBoostGenericDetailImpl; template< typename T , typename U > class HasMultiplyAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiplyAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::
concept_map_ < HasMultiplyAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiplyAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasMultiplyAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_d
etail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasMultiplyAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasMultiplyAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_deta
il_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "*=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "*=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: gen
eric:: std_concept:: HasMultiplyAssign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasMultiplyAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasMultiplyAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasMultiplyAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasMultiplyAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_multiply_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_multiply_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasMultiplyAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator multiply_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_MULTIPLY_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasNegate; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasNegate { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasNegate < T > > { typedef boost_generic_detail_params < T > type; }; template< class,
class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetai
lTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( - ::std::declval< const T& >() ) ) >::type > { typedef decltype ( - ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mp
l::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduc
e_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPara
ms, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGeneri
cDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasNegate; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_de
tail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename b
oost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasNegate < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasNegate < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid
 {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNegate HasNegateBoostGenericDetailImpl; template< typename T > class HasNegate : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNegate:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasNegate < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNegate boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typenam
e ::boost_generic_concept_map_detail::concept_map_ < HasNegate < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_ty
pe , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasNegate :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasNegate :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "-" "( " "const T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return
_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "-" "( " "const T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasNegate < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasNegate < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNegate type; }; } } } namespace bo
ost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasNegate < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasNegate < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_negate.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NEGATE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NEGATE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_negate.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasNegate)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator negate)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NEGATE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasNotEqualTo; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasNotEqualTo { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasNotEqualTo < T , U > > { typedef boost
_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() != ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() != ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class Boos
tGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub
_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasNotEqualTo; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_gen
eric_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasNotEqualTo < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_
generic_detail_is_valid_ < HasNotEqualTo < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNotEqualTo HasNotEqualToBoostGenericDetailImpl; template< typename T , typename U > class HasNotEqualTo : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNotEqualTo:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasNotEqualTo < T , U > > ::boost_generic_concept_map_impl , T ,
U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNotEqualTo boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasNotEqualTo < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters
 unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "!=" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_c
oncept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "!=" "( " "const T& , const U&" " )" " is not convertible to " "bool" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasNotEqualTo < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasNotEqualTo < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasNotEqualTo type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasNotEqualTo < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; t
emplate< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasNotEqualTo < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_not_equal_to.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NOT_EQUAL_TO_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NOT_EQUAL_TO_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_not_equal_to.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasNotEqualTo)( (typename) T, (typename) U )
+, ( (bool)(operator not_equal_to)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_NOT_EQUAL_TO_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasPlus; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPlus { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasPlus < T , U > > { typedef boost_generic_detail_pa
rams < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< cl
ass BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() + ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() + ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTyp
enames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< cl
ass BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::gene
ric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void >
 struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPlus; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type
>::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map
 , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPlus < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGener
icDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPlus < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlus HasPlusBoostGenericDetailImpl; template< typename T , typename U > class HasPlus : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlus:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPlus < T , U > > ::boost_generic_concept_map_impl , T , U
> { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlus boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPlus < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be
substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPlus :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPlus :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >:
:type >::value , "requires " "result_type" " operator " "+" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "+" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasPlus < T , U > > : mpl::true_ {}; template< typename T , typename U > struct c
oncept_impl_of < ::boost:: generic:: std_concept:: HasPlus < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlus type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasPlus < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPlus < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_plus.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_plus.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPlus)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator plus)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasPlusAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPlusAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasPlusAssign < T , U > > { typedef boost
_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction typ
e; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() += ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() += ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames
>::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class Bo
ostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::d
etail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struc
t boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPlusAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type
>::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map
 , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPlusAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class Boos
tGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPlusAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlusAssign HasPlusAssignBoostGenericDetailImpl; template< typename T , typename U > class HasPlusAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlusAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPlusAssign < T , U > >
 ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlusAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPlusAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_p
arent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPlusAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPlusAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_ma
p , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "+=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "+=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasPlusAssign < T , U > > : mpl::true_
{}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasPlusAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPlusAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasPlusAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPlusAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_plus_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_plus_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPlusAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator plus_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PLUS_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasPostdecrement; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPostdecrement { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasPostdecrement < T > > { typedef boost_generic_detail_params < T > type;
 }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , cl
ass BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() -- ) ) >::type > { typedef decltype ( ::std::declval< T& >() -- ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > ,
::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl
_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGeneri
cDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class
BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPostdecrement; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typenam
e boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy
_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPostdecrement < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPostdecrement < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T
>::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostdecrement HasPostdecrementBoostGenericDetailImpl; template< typename T > class HasPostdecrement : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostdecrement:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPostdecrement < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostdecrement boost_generic_detail_concept_impl; typedef typename boost_generic_detail_c
oncept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPostdecrement < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_t
ype result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPostdecrement :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPostdecrement :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "--" "( " "T& , int" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::i
s_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "--" "( " "T& , int" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasPostdecrement < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasPostdecrement < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_conce
pt:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostdecrement type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasPostdecrement < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPostdecrement < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_postdecrement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTDECREMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTDECREMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_postdecrement.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPostdecrement)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator postdecrement)( (T&), (int) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTDECREMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasPostincrement; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPostincrement { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasPostincrement < T > > { typedef boost_generic_detail_params < T > type;
 }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , cl
ass BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() ++ ) ) >::type > { typedef decltype ( ::std::declval< T& >() ++ ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > ,
::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl
_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGeneri
cDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class
BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPostincrement; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typenam
e boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy
_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPostincrement < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPostincrement < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T
>::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostincrement HasPostincrementBoostGenericDetailImpl; template< typename T > class HasPostincrement : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostincrement:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPostincrement < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostincrement boost_generic_detail_concept_impl; typedef typename boost_generic_detail_c
oncept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPostincrement < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_t
ype result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPostincrement :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPostincrement :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "++" "( " "T& , int" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::i
s_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "++" "( " "T& , int" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasPostincrement < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasPostincrement < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_conce
pt:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPostincrement type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasPostincrement < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPostincrement < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_postincrement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTINCREMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTINCREMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_postincrement.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPostincrement)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator postincrement)( (T&), (int) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_POSTINCREMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasPredecrement; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPredecrement { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasPredecrement < T > > { typedef boost_generic_detail_params < T > type; };
 template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class
 BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( -- ::std::declval< T& >() ) ) >::type > { typedef decltype ( -- ::std::declval< T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::b
oost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_th
is_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDe
tailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class Boo
stGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPredecrement; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename bo
ost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_typ
e < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPredecrement < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPredecrement < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boo
st_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPredecrement HasPredecrementBoostGenericDetailImpl; template< typename T > class HasPredecrement : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPredecrement:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPredecrement < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPredecrement boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl:
:template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPredecrement < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_ty
pe; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPredecrement :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPredecrement :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "--" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typena
me boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "--" "( " "T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasPredecrement < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasPredecrement < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_im
pl_detail:: boost_generic_detail_concept_implHasPredecrement type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasPredecrement < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPredecrement < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_predecrement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREDECREMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREDECREMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_predecrement.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPredecrement)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator predecrement)( (T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREDECREMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasPreincrement; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasPreincrement { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasPreincrement < T > > { typedef boost_generic_detail_params < T > type; };
 template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class
 BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ++ ::std::declval< T& >() ) ) >::type > { typedef decltype ( ++ ::std::declval< T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::b
oost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_th
is_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDe
tailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class Boo
stGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasPreincrement; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename bo
ost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_typ
e < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasPreincrement < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasPreincrement < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boo
st_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPreincrement HasPreincrementBoostGenericDetailImpl; template< typename T > class HasPreincrement : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPreincrement:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPreincrement < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasPreincrement boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl:
:template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasPreincrement < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_ty
pe; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasPreincrement :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasPreincrement :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "++" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typena
me boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "++" "( " "T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasPreincrement < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasPreincrement < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_im
pl_detail:: boost_generic_detail_concept_implHasPreincrement type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasPreincrement < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasPreincrement < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_preincrement.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREINCREMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREINCREMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_preincrement.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasPreincrement)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator preincrement)( (T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_PREINCREMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasRightShift; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasRightShift { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasRightShift < T , U > > { typedef boost
_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction typ
e; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() >> ::std::declval< const U& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() >> ::std::declval< const U& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, B
oostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type
> ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenam
es > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPar
ams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasRightShift; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typena
me_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_de
tail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasRightShift < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T
 , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasRightShift < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShift HasRightShiftBoostGenericDetailImpl; template< typename T , typename U > class HasRightShift : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShift:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ <
 HasRightShift < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShift boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasRightShift < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_ma
p ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasRightShift :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasRightShift :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_d
etail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " ">>" "( " "const T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " ">>" "( " "const T& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: s
td_concept:: HasRightShift < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasRightShift < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShift type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasRightShift < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasRightShift < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_right_shift.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasRightShift)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator right_shift)( (const T&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasRightShiftAssign; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasRightShiftAssign { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasRightShiftAssign < T , U >
> { typedef boost_generic_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail
::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() >>= ::std::declval< U >() ) ) >::type > { typedef decltype ( ::std::declval< T& >() >>= ::std::declval< U >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGe
nericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }
; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ,
 ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams ,
class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasRightShiftAssign; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typena
me_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_de
tail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasRightShiftAssign < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< type
name T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasRightShiftAssign < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShiftAssign HasRightShiftAssignBoostGenericDetailImpl; template< typename T , typename U > class HasRightShiftAssign : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShiftAssign:: boost_generic_detail_completed_concept_map < typename ::boost_generi
c_concept_map_detail::concept_map_ < HasRightShiftAssign < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShiftAssign boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasRightShiftAssign < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; st
atic_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasRightShiftAssign :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasRightShiftAssign :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_im
pl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " ">>=" "( " "T& , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " ">>=" "( " "T& , U" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U >
 struct is_concept < ::boost:: generic:: std_concept:: HasRightShiftAssign < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasRightShiftAssign < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasRightShiftAssign type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasRightShiftAssign < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasRightShiftAssign < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_right_shift_assign.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_ASSIGN_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_ASSIGN_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_right_shift_assign.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasRightShiftAssign)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator right_shift_assign)( (T&), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_RIGHT_SHIFT_ASSIGN_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasSubscript; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasSubscript { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasSubscript < T , U > > { typedef boost_ge
neric_detail_params < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type;
}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T& >() [::std::declval< const U& >()] ) ) >::type > { typedef decltype ( ::std::declval< T& >() [::std::declval< const U& >()] ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template<
 class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::g
eneric::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < re
sult_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< T&& >() [::std::declval< const U& >()] ) ) >::type > { typedef decltype ( ::std::declval< T&& >() [::std::declval< const U& >()] ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2result_type; template< typename T , typename U , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames >
struct boost_generic_detail_impl_funs_deduce_2result_type < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMa
p , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_th
is_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_2result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template<
 class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasSubscript; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef bo
ost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_typ
e_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasSubscript < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class B
oostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasSubscript < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSubscript HasSubscriptBoostGenericDetailImpl; template< typename T , typename U > class HasSubscript : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSubscript:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasSubscript < T , U > > ::
boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSubscript boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasSubscript < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent
_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost::generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasSubscript :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasSubscript :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boo
st_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "operator_" "( " "T& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "operator_" "( " "T& , const U&" " )" " is not convertible to " "result_type" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_
completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "operator_" "( " "T&& , const U&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "operator_" "( " "T&& , const U&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std
_concept:: HasSubscript < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasSubscript < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSubscript type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasSubscript < T , U > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasSubscript < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_subscript.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SUBSCRIPT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SUBSCRIPT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_subscript.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasSubscript)( (typename) T, (typename) U )
+, ( typename result_type )
+, ( (result_type)(operator subscript)( (T&), (const U&) ) )
+, ( (result_type)(operator subscript)( (T&&), (const U&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SUBSCRIPT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 38 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class HasSwap; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasSwap { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < HasSwap < T , U > > { typedef boost_generic_detail_pa
rams < T , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type swap (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , typename U , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T , U > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( swap (::std::declval< T >() , :
:std::declval< U >()) ) ) >::type > { typedef decltype ( swap (::std::declval< T >() , ::std::declval< U >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGener
icDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasSwap; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::ge
neric::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasSwap < T , U > > { typedef boost_generic
_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasSwap < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSwap HasSwapBoostGenericDetailImpl; template< typename T , typename U > class HasSwap : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSwap:: boost_generic_detail_completed_con
cept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasSwap < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSwap boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasSwap < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; stat
ic_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "swap" "( " "T , U" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_det
ail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "swap" "( " "T , U" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: HasSwap < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: HasSwap < T , U > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasSwap type; }; } } } namespace boost_generic_concept_map_detail { template< typename T , typename U > struct concept_map_ < ::boost:: generic:: std_concept:: HasSwap < T , U > > { static bool const is_auto_concept_definition = true, is_usabl
e = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasSwap < T , U > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_swap.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,51 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SWAP_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SWAP_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+//#include <algorithm>
+//#include <utility>
+//
+//namespace boost { namespace generic { namespace std_concept {
+//
+//template< class L, class R >
+//auto swap( L&& left_, R&& right_ )
+//noexcept( noexcept( std::swap( std::declval< L >(), std::declval< R >() ) ) )
+//-> decltype( std::swap( std::declval< L >(), std::declval< R >() ) )
+//{
+// return std::swap( std::forward< L >( left_ ), std::forward< R >( right_ ) );
+//}
+//
+//} } }
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_swap.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasSwap)( (typename) T, (typename) U )
+, ( (void)(swap)( (T), (U) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_SWAP_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 23 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasUnaryPlus; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasUnaryPlus { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasUnaryPlus < T > > { typedef boost_generic_detail_params < T > type; }; template
< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passresult_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: result_type >::type > { typedef typename BoostGenericDetailConceptMap:: result_type type; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passresult_type < BoostGenericDetailConceptMap >::type result_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0result_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGen
ericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class result_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < result_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( + ::std::declval< const T& >() ) ) >::type > { typedef decltype ( + ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::
boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type; template< typename T , class BoostGenericDetailAugresult_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1result_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugresult_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugresult_type result_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class result_type > static ::boost::generic::detail::type_< result_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < result_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_t
his_deduce_1result_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1result_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1result_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericD
etailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1result_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0result_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceresult_type : boost_generic_detail_deduce_1result_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class Bo
ostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasUnaryPlus; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: result_type >::value , boost_generic_detail_deduceresult_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boos
t_generic_detail_typename_deducers:: result_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: result_type > >::type result_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: result_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< result_type > , ::boost::generic::detail::is_not_dummy_type
< typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , result_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasUnaryPlus < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < HasUnaryPlus < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_gener
ic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasUnaryPlus HasUnaryPlusBoostGenericDetailImpl; template< typename T > class HasUnaryPlus : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasUnaryPlus:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasUnaryPlus < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasUnaryPlus boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_de
tail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasUnaryPlus < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: result_type result_type; private: typedef ::boost:
:generic::detail::type_list < result_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename HasUnaryPlus :: result_type , ::boost::generic::detail::no_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename HasUnaryPlus :: result_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "result_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "result_type" " operator " "+" "( " "const T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concep
t_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , result_type > >::value , "the return type of " "operator " "+" "( " "const T&" " )" " is not convertible to " "result_type" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasUnaryPlus < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasUnaryPlus < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detai
l_concept_implHasUnaryPlus type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasUnaryPlus < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasUnaryPlus < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_unary_plus.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_UNARY_PLUS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_UNARY_PLUS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_unary_plus.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.operator]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasUnaryPlus)( (typename) T )
+, ( typename result_type )
+, ( (result_type)(operator unary_plus)( (const T&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_UNARY_PLUS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 27 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class HasVirtualDestructor; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implHasVirtualDestructor { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < HasVirtualDestructor < T > > { typedef boost_generic_detail_params
 < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasDestructor<T>, PolymorphicClass<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasDestructor<T>, PolymorphicClass<T> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypename
s... > , typename ::boost::generic::detail::always_void < True< has_virtual_destructor< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< has_virtual_destructor< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; temp
late< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasDestructor<T>, PolymorphicClass<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasDestructor<T>, PolymorphicClass<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map HasVirtualDestructor; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_con
cept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , HasVirtualDestructor < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < H
asVirtualDestructor < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasVirtualDestructor HasVirtualDestructorBoostGenericDetailImpl; template< typename T > class HasVirtualDestructor : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasVirtualDestructor:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasVirtualDestructor < T > > ::boost_generic_concept_map_impl , T > { typedef b
oost_generic_concept_impl_detail:: boost_generic_detail_concept_implHasVirtualDestructor boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < HasVirtualDestructor < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasDestructor<T>, PolymorphicClass<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitut
ion_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< has_virtual_destructor< T >::value > >::value , "requires " "True< has_virtual_destructor< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: HasVirtualDestructor < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: HasVirtualDestructor < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_gene
ric_detail_concept_implHasVirtualDestructor type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: HasVirtualDestructor < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: HasVirtualDestructor < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/has_virtual_destructor.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_VIRTUAL_DESTRUCTOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_VIRTUAL_DESTRUCTOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/polymorphic_class.hpp>
+#include <boost/type_traits/has_virtual_destructor.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/has_virtual_destructor.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.destruct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (HasVirtualDestructor)( (typename) T )
+, ( public (HasDestructor<T>) (PolymorphicClass<T>) )
+, ( requires True< has_virtual_destructor< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_HAS_VIRTUAL_DESTRUCTOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 27 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class IdentityOf; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implIdentityOf { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < IdentityOf < T > > { typedef boost_generic_detail_params < T > type; }; template< clas
s, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedtype { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedtype < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: type >::type > { typedef typename BoostGenericDetailConceptMap:: type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaulttype { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaulttype < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherType
names... > , typename ::boost::generic::detail::always_void < T >::type > { typedef T type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedtype < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passtype : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaulttype < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename
T , class type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<type, T> >::type > : ::boost::generic::detail::concept_is_valid < SameType<type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passtype < BoostGenericDetailConceptMap , boost_generic_detai
l_params < T > , ::boost::generic::detail::type_list < void****** > >::type type ; }; template< class, class, class > struct boost_generic_detail_deduce_0type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducetype : boost_generic_detail_deduce_0type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::st
d::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map IdentityOf; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: type >::value , boost_generic_detail_deducetype < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: type > >::type type; private: template< class, class > friend struct boost_generic_detail_is_valid_; type
def boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , IdentityOf < T > > { typedef boost_generic_detail_completed_concept_map
 < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < IdentityOf < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIdentityOf IdentityOfBoostGenericDetailImpl; template< typename T > class IdentityOf : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIdentityOf:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_deta
il::concept_map_ < IdentityOf < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIdentityOf boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IdentityOf < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_g
eneric_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: type type; private: typedef ::boost::generic::detail::type_list < type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename IdentityOf :: type , ::boost::generic::detail::no_deduction >::value , "typename '" "type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename IdentityOf :: type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<type, T> >::value , "requires " "SameType<type, T>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept <
::boost:: generic:: std_concept:: IdentityOf < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: IdentityOf < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIdentityOf type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: IdentityOf < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: IdentityOf < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/identity_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_IDENTITY_OF_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_IDENTITY_OF_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/identity_of.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.transform]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (IdentityOf)( (typename) T )
+, ( typename type, T )
+, ( requires SameType<type, T> )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_IDENTITY_OF_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+#line 39 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class IntegralLike; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implIntegralLike { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < IntegralLike < T > > { typedef boost_generic_detail_params < T > type; }; template< class, cl
ass, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ArithmeticLike<T>, HasComplement<T>, HasModulus<T, T>, HasBitAnd<T, T>, HasBitXor<T, T>, HasBitOr<T, T>, HasLeftShift<T, T>, HasRightShift<T, T>, HasModulusAssign<T, const T&>, HasLeftShiftAssign<T, const T&>, HasRightShiftAssign<T, const T&>, HasBitAndAssign<T, const T&>, HasBitXorAssign<T, const T&>, HasBitOrAssign<T, const T&> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ArithmeticLike<T>, HasComplement<T>, HasModulus<T, T>, HasBitAnd<T, T>, HasBitXor<T, T>, HasBitOr<T, T>, HasLeftShift<T, T>, HasRightShift<T, T>, HasModulusAssign<T, const T&>, HasLeftShiftAssign<T, const T
&>, HasRightShiftAssign<T, const T&>, HasBitAndAssign<T, const T&>, HasBitXorAssign<T, const T&>, HasBitOrAssign<T, const T&> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasComplement<T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasComplement<T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGen
ericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasModulus<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasModulus<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl:
:and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasBitAnd<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasBitAnd<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct
 boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasBitXor<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasBitXor<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGener
icDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasBitOr<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasBitOr<T, T>::result_type, T> > {}; templat
e< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasLeftShift<T, T>::result_type, T> >::type > : ::boost::generic::detail::concept_is_valid < Conver
tible<typename HasLeftShift<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_7 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename HasRightShift<T, T>::result_type, T
> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename HasRightShift<T, T>::result_type, T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_8 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_8 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::alwa
ys_void < SameType<typename HasModulusAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasModulusAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_8 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_9 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_9 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list
 < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasLeftShiftAssign<T,const T&>::result_type,T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasLeftShiftAssign<T,const T&>::result_type,T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_9 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_9 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_10 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_ar
e_valid_10 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasRightShiftAssign<T,const T&>::result_type,T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasRightShiftAssign<T,const T&>::result_type,T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_10 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_10 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_11 : ::std::integral_constant< bool, false > {}; template< typename T ,
class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_11 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasBitAndAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasBitAndAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_11 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_11 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requir
es_are_valid_12 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_12 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasBitXorAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasBitXorAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_12 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_11 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_12 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class
 BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_13 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_13 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename HasBitOrAssign<T, const T&>::result_type, T&> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename HasBitOrAssign<T, const T&>::result_type, T&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_13 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_12 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_13 < BoostGenericDetailParams,
BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ArithmeticLike<T>, HasComplement<T>, HasModulus<T, T>, HasBitAnd<T, T>, HasBitXor<T, T>, HasBitOr<T, T>, HasLeftShift<T, T>, HasRightShift<T, T>, HasModulusAssign<T, const T&>, HasLeftShiftAssign<T, const T&>, HasRightShiftAssign<T, const T&>, HasBitAndAssign<T, const T&>, HasBitXorAssign<T, const T&>, HasBitOrAssign<T, const T&> >::type > : virtual boost::generic::detail::complete
d_concept_map_bases < BoostGenericDetailConceptMap , ArithmeticLike<T>, HasComplement<T>, HasModulus<T, T>, HasBitAnd<T, T>, HasBitXor<T, T>, HasBitOr<T, T>, HasLeftShift<T, T>, HasRightShift<T, T>, HasModulusAssign<T, const T&>, HasLeftShiftAssign<T, const T&>, HasRightShiftAssign<T, const T&>, HasBitAndAssign<T, const T&>, HasBitXorAssign<T, const T&>, HasBitOrAssign<T, const T&> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map IntegralLike; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic
_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_13< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , IntegralLike < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < IntegralLike < T > , BoostGene
ricDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralLike IntegralLikeBoostGenericDetailImpl; template< typename T > class IntegralLike : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralLike:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralLike < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralL
ike boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralLike < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ArithmeticLike<T>, HasComplement<T>, HasModulus<T, T>, HasBitAnd<T, T>, HasBitXor<T, T>, HasBitOr<T, T>, HasLeftShift<T, T>, HasRightShift<T, T>, HasModulusAssign<T, const T&>, HasLeftShiftAssign<T, const T&>, HasRightShiftAssign<T, const T&>, HasBitAndAssign<T, const T&>, HasBitXorAssign<T, const T&>, HasBitOrAssign<T, const T&> >() ) >::type::value , "This message should never be see
n." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasComplement<T>::result_type, T> >::value , "requires " "Convertible<typename HasComplement<T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasModulus<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasModulus<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail
::concept_is_valid < Convertible<typename HasBitAnd<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasBitAnd<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasBitXor<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasBitXor<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasBitOr<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasBitOr<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasLeftShift<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasLeftShift<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename HasRightShift<T, T>::result_type, T> >::value , "requires " "Convertible<typename HasRightShift<T, T>::result_type, T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameT
ype<typename HasModulusAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasModulusAssign<T, const T&>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasLeftShiftAssign<T,const T&>::result_type,T&> >::value , "requires " "SameType<typename HasLeftShiftAssign<T,const T&>::result_type,T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasRightShiftAssign<T,const T&>::result_type,T&> >::value , "requires " "SameType<typename HasRightShiftAssign<T,const T&>::result_type,T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasBitAndAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasBitAndAssign<T, const T&>::result_type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasBitXorAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasBitXorAssign<T, const T&>::result_
type, T&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename HasBitOrAssign<T, const T&>::result_type, T&> >::value , "requires " "SameType<typename HasBitOrAssign<T, const T&>::result_type, T&>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: IntegralLike < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: IntegralLike < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralLike type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < signed char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < signed char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < signed char > > ::value , "Concept map does not satisfy the following requirements: " "boo
st::generic::std_concept::IntegralLike < signed char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < signed char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < short int > > ::value , "Concept map does not satisfy the following requirements: " "boost::ge
neric::std_concept::IntegralLike < short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < int > > ::value , "Concept map does not satisfy the following requirements: " "boost::generic::std_concept
::IntegralLike < int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < long int > > ::value , "Concept map does not satisfy the following requirements: " "boost::gener
ic::std_concept::IntegralLike < long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < long long int > > ::value , "Concept map does not satisfy the following requirements:
" "boost::generic::std_concept::IntegralLike < long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < long long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < unsigned char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < unsigned char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < unsigned char > > ::value , "Concept map does not satisfy the following requirements:
" "boost::generic::std_concept::IntegralLike < unsigned char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < unsigned char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < unsigned short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < unsigned short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < unsigned short int > > ::value , "Concept map does not satisfy the following
 requirements: " "boost::generic::std_concept::IntegralLike < unsigned short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < unsigned short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < unsigned int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < unsigned int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < unsigned int > > ::value , "Concept map does not satisfy the following requirements: " "
boost::generic::std_concept::IntegralLike < unsigned int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < unsigned int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < unsigned long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < unsigned long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < unsigned long int > > ::value , "Concept map does not satisfy the following re
quirements: " "boost::generic::std_concept::IntegralLike < unsigned long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < unsigned long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::IntegralLike < unsigned long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::IntegralLike < unsigned long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::IntegralLike < unsigned long long int > > ::value , "Concept map does not satisfy t
he following requirements: " "boost::generic::std_concept::IntegralLike < unsigned long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::IntegralLike < unsigned long long int > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/integral_like.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,107 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_INTEGRAL_LIKE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_INTEGRAL_LIKE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/arithmetic_like.hpp>
+#include <boost/generic/std_concept/concepts/has_complement.hpp>
+#include <boost/generic/std_concept/concepts/has_modulus.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_and.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_xor.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_or.hpp>
+#include <boost/generic/std_concept/concepts/has_left_shift.hpp>
+#include <boost/generic/std_concept/concepts/has_right_shift.hpp>
+#include <boost/generic/std_concept/concepts/has_modulus_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_left_shift_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_right_shift_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_and_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_xor_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_bit_or_assign.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/integral_like.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.arithmetic]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (IntegralLike)( (typename) T )
+, ( public (ArithmeticLike<T>) (HasComplement<T>) (HasModulus<T, T>)
+ (HasBitAnd<T, T>) (HasBitXor<T, T>) (HasBitOr<T, T>) (HasLeftShift<T, T>)
+ (HasRightShift<T, T>) (HasModulusAssign<T, const T&>)
+ (HasLeftShiftAssign<T, const T&>) (HasRightShiftAssign<T, const T&>)
+ (HasBitAndAssign<T, const T&>) (HasBitXorAssign<T, const T&>)
+ (HasBitOrAssign<T, const T&>)
+ )
+, ( requires Convertible<typename HasComplement<T>::result_type, T> )
+, ( requires Convertible<typename HasModulus<T, T>::result_type, T> )
+, ( requires Convertible<typename HasBitAnd<T, T>::result_type, T> )
+, ( requires Convertible<typename HasBitXor<T, T>::result_type, T> )
+, ( requires Convertible<typename HasBitOr<T, T>::result_type, T> )
+, ( requires Convertible<typename HasLeftShift<T, T>::result_type, T> )
+, ( requires Convertible<typename HasRightShift<T, T>::result_type, T> )
+, ( requires SameType<typename HasModulusAssign<T, const T&>::result_type, T&> )
+, ( requires SameType<typename HasLeftShiftAssign<T,const T&>::result_type,T&> )
+, ( requires SameType<typename HasRightShiftAssign<T,const T&>::result_type,T&>)
+, ( requires SameType<typename HasBitAndAssign<T, const T&>::result_type, T&> )
+, ( requires SameType<typename HasBitXorAssign<T, const T&>::result_type, T&> )
+, ( requires SameType<typename HasBitOrAssign<T, const T&>::result_type, T&> )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( signed char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( long long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( unsigned char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( unsigned short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( unsigned int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::IntegralLike)( unsigned long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+((boost::generic::std_concept::IntegralLike)( unsigned long long int ))
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+// ToDo: Possibly make maps for bool, etc. (not mentioned in standard)
+
+// These are included in order to bring in the concept maps for built-in types
+//#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+//#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_INTEGRAL_LIKE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class LessThanComparable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implLessThanComparable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < LessThanComparable < T > > { typedef boost_generic_detail_params < T >
 type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasLess< T, T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasLess< T, T > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params
< T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() > ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() > ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type
 type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() <= ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() <= ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGen
ericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const T& >() >= ::std::declval< const T& >() ) ) >::type > { typedef decltype ( ::std::declval< const T& >() >= ::std::declval< const T& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGen
ericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasLess< T, T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasLess< T, T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T
> > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map LessThanComparable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_gene
ric_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_
generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , LessThanComparable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < LessThanComparable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map
_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLessThanComparable LessThanComparableBoostGenericDetailImpl; template< typename T > class LessThanComparable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLessThanComparable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LessThanComparable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLessThanComparable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LessThanComparable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; ty
pedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasLess< T, T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::
is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " ">" "( " "const T& a , const T& b" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " ">" "( " "const T& a , const T& b" " )" " is not convertible to " "bool" ); static_assert ( ::boost::generic
::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " "<=" "( " "const T& a , const T& b" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " "<=" "( " "const T& a , const T& b" " )" " is not convertible to " "bool" ); static_assert ( ::bo
ost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " operator " ">=" "( " "const T& a , const T& b" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "operator " ">=" "( " "const T& a , const T& b" " )" " is not convertible to " "bool" ); }; } } }
 namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: LessThanComparable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: LessThanComparable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLessThanComparable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: LessThanComparable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: LessThanComparable < T > >() ) instantiate_; };
}; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/less_than_comparable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,61 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LESS_THAN_COMPARABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LESS_THAN_COMPARABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_less.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/less_than_comparable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.comparison]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (LessThanComparable)( (typename) T ), ( public HasLess< T, T > )
+, ( (bool)(operator greater)( (const T&) a, (const T&) b), { return b < a; } )
+, ( (bool)(operator less_equal)( (const T&) a, (const T&) b), { return !(b < a); } )
+, ( (bool)(operator greater_equal)( (const T&) a, (const T&) b), { return !(a < b); } )
+, ( axiom Consistency(T a, T b) {
+ (a > b) == (b < a);
+ (a <= b) == !(b < a);
+ (a >= b) == !(a < b);
+ }
+ )
+, ( axiom Irreflexivity(T a) { (a < a) == false; } )
+, ( axiom Antisymmetry(T a, T b) {
+ if (a < b)
+ (b < a) == false;
+ }
+ )
+, ( axiom Transitivity(T a, T b, T c) {
+ if (a < b && b < c)
+ (a < c) == true;
+ }
+ )
+, ( axiom TransitivityOfEquivalence(T a, T b, T c) {
+ if (!(a < b) && !(b < a) && !(b < c) && !(c < b))
+ (!(a < c) && !(c < a)) == true;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LESS_THAN_COMPARABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class LvalueReference; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implLvalueReference { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < LvalueReference < T > > { typedef boost_generic_detail_params < T > type; }; template<
class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boo
st_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map LvalueReference; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_
detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , LvalueReference < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < LvalueReference < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLvalueReference LvalueReferenceBoostGenericDetailImpl; template< typename T > class LvalueReference
 : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLvalueReference:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LvalueReference < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLvalueReference boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LvalueReference < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded:
:value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: LvalueReference < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: LvalueReference < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLvalueReference type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::LvalueReference < T& > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::LvalueReference < T& > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/lvalue_reference.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LVALUE_REFERENCE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LVALUE_REFERENCE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/lvalue_reference.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.classify]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (LvalueReference)( (typename) T )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, (boost::generic::std_concept::LvalueReference)(T&)
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_LVALUE_REFERENCE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class MoveAssignable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMoveAssignable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < MoveAssignable < T > > { typedef boost_generic_detail_params < T > type; }; te
mplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasAssign<T,T&&> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasAssign<T,T&&> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Rv
alueOf<T> >::type > : ::boost::generic::detail::concept_is_valid < RvalueOf<T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasAssign<T, typename Rvalue
Of<T>::type > >::type > : ::boost::generic::detail::concept_is_valid < HasAssign<T, typename RvalueOf<T>::type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_pare
nt_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasAssign<T,T&&> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasAssign<T,T&&> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MoveAssignable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::
boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_2< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MoveAssignable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MoveAssignable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_
generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveAssignable MoveAssignableBoostGenericDetailImpl; template< typename T > class MoveAssignable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveAssignable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MoveAssignable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveAssignable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template
 boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MoveAssignable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasAssign<T,T&&> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into
parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < RvalueOf<T> >::value , "requires " "RvalueOf<T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < HasAssign<T, typename RvalueOf<T>::type > >::value , "requires " "HasAssign<T, typename RvalueOf<T>::type >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: MoveAssignable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: MoveAssignable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveAssignable type; }; } } } namespace boost_generic_concept_map_detail { template< type
name T > struct concept_map_ < ::boost:: generic:: std_concept:: MoveAssignable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MoveAssignable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/move_assignable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_ASSIGNABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_ASSIGNABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+#include <boost/generic/std_concept/concepts/rvalue_of.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/move_assignable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MoveAssignable)( (typename) T )
+, ( public HasAssign<T,T&&> )
+, ( requires RvalueOf<T> )
+, ( requires HasAssign<T, typename RvalueOf<T>::type > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_ASSIGNABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class MoveConstructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMoveConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < MoveConstructible < T > > { typedef boost_generic_detail_params < T > ty
pe; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Constructible<T,T&&> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Constructible<T,T&&> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail:
:always_void < RvalueOf<T> >::type > : ::boost::generic::detail::concept_is_valid < RvalueOf<T> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Constructib
le<T, typename RvalueOf<T>::type> >::type > : ::boost::generic::detail::concept_is_valid < Constructible<T, typename RvalueOf<T>::type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct bo
ost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < Constructible<T,T&&> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Constructible<T,T&&> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MoveConstructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_
generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_2< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MoveConstructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MoveConstructible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < Bo
ostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveConstructible MoveConstructibleBoostGenericDetailImpl; template< typename T > class MoveConstructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MoveConstructible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveConstructible boost_generic_detail_concept_impl; ty
pedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MoveConstructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Constructible<T,T&&> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_
sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < RvalueOf<T> >::value , "requires " "RvalueOf<T>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Constructible<T, typename RvalueOf<T>::type> >::value , "requires " "Constructible<T, typename RvalueOf<T>::type>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: MoveConstructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: MoveConstructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMoveConstruc
tible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: MoveConstructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MoveConstructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/move_constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/concepts/rvalue_of.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/move_constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MoveConstructible)( (typename) T )
+, ( public Constructible<T,T&&> )
+, ( requires RvalueOf<T> )
+, ( requires Constructible<T, typename RvalueOf<T>::type> )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_MOVE_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class NothrowDestructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implNothrowDestructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < NothrowDestructible < T > > { typedef boost_generic_detail_params <
T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasDestructor< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasDestructor< T > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_
detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasDestructor< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasDestructor< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map NothrowDestructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail
_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , NothrowDestructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < NothrowDestructible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGeneric
DetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNothrowDestructible NothrowDestructibleBoostGenericDetailImpl; template< typename T > class NothrowDestructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNothrowDestructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < NothrowDestructible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNothrowDestructible boost_generic_detail_concept_impl;
typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < NothrowDestructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasDestructor< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_paren
t_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: NothrowDestructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: NothrowDestructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNothrowDestructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: NothrowDestructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl
{}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: NothrowDestructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/nothrow_destructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_NOTHROW_DESTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_NOTHROW_DESTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/nothrow_destructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.destruct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (NothrowDestructible)( (typename) T )
+, ( public HasDestructor< T > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_NOTHROW_DESTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename F , typename... Args > class Predicate; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implPredicate { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename F , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename F , typename... Args > struct boost_generic_detail_params_from_concept < Predicate < F , Args... > > { t
ypedef boost_generic_detail_params < F , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename F , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < F , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Callable< F, const Args&... > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Callable< F, const Args&... > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename F , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params <
 F , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible< typename Callable< F, const Args&... >::result_type, bool > >::type > : ::boost::generic::detail::concept_is_valid < Convertible< typename Callable< F, const Args&... >::result_type, bool > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename F , typename... Args > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class
 BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename F , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , Args... > , typename ::boost::generic::detail::always_void < Callable< F, const Args&... > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Callable< F, const Args&... > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename F , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , F , Args... > boost_generic_detail_typen
ame_deducers; typedef boost_generic_detail_completed_concept_map Predicate; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < F , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename F , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConcept
Map , Predicate < F , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , Args... > type; }; template< typename F , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Predicate < F , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPredicate PredicateBoostGenericDetailImpl; template< typename F , typename... Args > class Predicate : boost_generic_conc
ept_impl_detail:: boost_generic_detail_concept_implPredicate:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Predicate < F , Args... > > ::boost_generic_concept_map_impl , F , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPredicate boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Predicate < F , Args... > > ::boost_generic_concept_map_impl , F , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < F , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Callable< F, const Args&... > >
() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < Convertible< typename Callable< F, const Args&... >::result_type, bool > >::value , "requires " "Convertible< typename Callable< F, const Args&... >::result_type, bool >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename F , typename... Args > struct is_concept < ::boost:: generic::
std_concept:: Predicate < F , Args... > > : mpl::true_ {}; template< typename F , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: Predicate < F , Args... > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPredicate type; }; } } } namespace boost_generic_concept_map_detail { template< typename F , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: Predicate < F , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Predicate < F , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/predicate.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_PREDICATE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_PREDICATE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/callable.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/predicate.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.predicate]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Predicate)( (typename) F, (typename,,,) Args )
+, ( public Callable< F, const Args&... > )
+, ( requires Convertible< typename Callable< F, const Args&... >::result_type, bool > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_PREDICATE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/regular.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/regular.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Regular; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRegular { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Regular < T > > { typedef boost_generic_detail_params < T > type; }; template< class, class,
 class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Semiregular<T>, DefaultConstructible<T>, EqualityComparable<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Semiregular<T>, DefaultConstructible<T>, EqualityComparable<T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericD
etailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < Semiregular<T>, DefaultConstructible<T>, EqualityComparable<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Semiregular<T>, DefaultConstructible<T>, EqualityComparable<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Regular; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_c
ompleted_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Regular < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Re
gular < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRegular RegularBoostGenericDetailImpl; template< typename T > class Regular : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRegular:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Regular < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRegular boo
st_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Regular < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Semiregular<T>, DefaultConstructible<T>, EqualityComparable<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_g
eneric_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Regular < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Regular < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRegular type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Regular < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_c
oncept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Regular < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/regular.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/regular.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_REGULAR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_REGULAR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/default_constructible.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+#include <boost/generic/std_concept/concepts/semiregular.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/regular.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.regular]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Regular)( (typename) T )
+, ( public (Semiregular<T>) (DefaultConstructible<T>) (EqualityComparable<T>) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_REGULAR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class RvalueOf; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRvalueOf { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < RvalueOf < T > > { typedef boost_generic_detail_params < T > type; }; template< class, cla
ss, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedtype { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedtype < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: type >::type > { typedef typename BoostGenericDetailConceptMap:: type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaulttype { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaulttype < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames.
.. > , typename ::boost::generic::detail::always_void < T&& >::type > { typedef T&& type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedtype < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passtype : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaulttype < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T
, class type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ExplicitlyConvertible<T&, type> >::type > : ::boost::generic::detail::concept_is_valid < ExplicitlyConvertible<T&, type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool,
 false > {}; template< typename T , class type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ExplicitlyConvertible<T&&, type> >::type > : ::boost::generic::detail::concept_is_valid < ExplicitlyConvertible<T&&, type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first
_passtype < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < void****** > >::type type ; }; template< class, class, class > struct boost_generic_detail_deduce_0type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducetype : boost_generic_detail_deduce_0type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::
boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map RvalueOf; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: type >::value , boost_generic_detail_deducetype < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: type > >::type type; private: template< class
, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_2< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , RvalueOf <
T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < RvalueOf < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueOf RvalueOfBoostGenericDetailImpl; template< typename T > class RvalueOf : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueOf:: boost_generic_detail_completed_concept
_map < typename ::boost_generic_concept_map_detail::concept_map_ < RvalueOf < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueOf boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RvalueOf < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_gene
ric_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: type type; private: typedef ::boost::generic::detail::type_list < type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename RvalueOf :: type , ::boost::generic::detail::no_deduction >::value , "typename '" "type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename RvalueOf :: type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::concept_is_valid < ExplicitlyConvertible<T&, type> >::value , "requires " "ExplicitlyConvertible<T&, type>" ); static_assert ( ::boost::generic::detail::c
oncept_is_valid < ExplicitlyConvertible<T&&, type> >::value , "requires " "ExplicitlyConvertible<T&&, type>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: RvalueOf < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: RvalueOf < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueOf type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: RvalueOf < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::
boost:: generic:: std_concept:: RvalueOf < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_OF_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_OF_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/explicitly_convertible.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/rvalue_of.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.transform]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (RvalueOf)( (typename) T )
+, ( typename type, T&& )
+, ( requires ExplicitlyConvertible<T&, type> )
+//, ( requires Convertible<T&&, type> ) // NOTE: This is commented out because it implies implicit conversion from T& to T&&, which correctly fails. Standard error??const T&
+, ( requires ExplicitlyConvertible<T&&, type> ) // NOTE: This is not in the standard and replaces the above line.
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_OF_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class RvalueReference; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRvalueReference { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < RvalueReference < T > > { typedef boost_generic_detail_params < T > type; }; template<
class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boo
st_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map RvalueReference; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_
detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , RvalueReference < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < RvalueReference < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueReference RvalueReferenceBoostGenericDetailImpl; template< typename T > class RvalueReference
 : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueReference:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RvalueReference < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueReference boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RvalueReference < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded:
:value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: RvalueReference < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: RvalueReference < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRvalueReference type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::RvalueReference < T&& > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::RvalueReference < T&& > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/rvalue_reference.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_REFERENCE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_REFERENCE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/rvalue_reference.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.classify]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (RvalueReference)( (typename) T )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, (boost::generic::std_concept::RvalueReference)(T&&)
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_RVALUE_REFERENCE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 27 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Semiregular; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implSemiregular { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Semiregular < T > > { typedef boost_generic_detail_params < T > type; }; template< c
lass, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < CopyConstructible< T >, CopyAssignable< T >, FreeStoreAllocatable< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , CopyConstructible< T >, CopyAssignable< T >, FreeStoreAllocatable< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type
_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType< typename CopyAssignable< T >::result_type, T& > >::type > : ::boost::generic::detail::concept_is_valid < SameType< typename CopyAssignable< T >::result_type, T& > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef
 ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < CopyConstructible< T >, CopyAssignable< T >, FreeStoreAllocatable< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , CopyConstructible< T >, CopyAssignable< T >, FreeStoreAllocatable< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Semiregular; publ
ic: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Semiregular < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap
 , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Semiregular < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSemiregular SemiregularBoostGenericDetailImpl; template< typename T > class Semiregular : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSemiregular:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Semireg
ular < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSemiregular boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Semiregular < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < CopyConstructible< T >, CopyAssignable< T >, FreeStoreAllocatable< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_su
b_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < SameType< typename CopyAssignable< T >::result_type, T& > >::value , "requires " "SameType< typename CopyAssignable< T >::result_type, T& >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Semiregular < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Semiregular < T > > { static bool const is_specialized = false; static bool const is_auto = 1
; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSemiregular type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Semiregular < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Semiregular < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/semiregular.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SEMIREGULAR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SEMIREGULAR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/copy_assignable.hpp>
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/free_store_allocatable.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/semiregular.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.regular]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Semiregular)( (typename) T )
+, ( public (CopyConstructible< T >) (CopyAssignable< T >)
+ (FreeStoreAllocatable< T >)
+ )
+, ( requires SameType< typename CopyAssignable< T >::result_type, T& > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SEMIREGULAR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,8 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class SignedIntegralLike; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implSignedIntegralLike { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < SignedIntegralLike < T > > { typedef boost_generic_detail_params < T > type; }; t
emplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < IntegralLike<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , IntegralLike<T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concep
ts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < IntegralLike<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , IntegralLike<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map SignedIntegralLike; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::
generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , SignedIntegralLike < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < SignedIntegralLike < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost
_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSignedIntegralLike SignedIntegralLikeBoostGenericDetailImpl; template< typename T > class SignedIntegralLike : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSignedIntegralLike:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < SignedIntegralLike < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSignedIntegralLike boost_generic_detail_concept_impl; typedef typename boost_generic_deta
il_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < SignedIntegralLike < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < IntegralLike<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters un
able to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: SignedIntegralLike < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: SignedIntegralLike < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSignedIntegralLike type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::SignedIntegralLike < signed char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SignedIntegralLike < signed char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::SignedIntegralLike < signed char > > ::value , "Concept map does not satisfy the following re
quirements: " "boost::generic::std_concept::SignedIntegralLike < signed char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::SignedIntegralLike < signed char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::SignedIntegralLike < short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SignedIntegralLike < short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::SignedIntegralLike < short int > > ::value , "Concept map does not satisfy the following requirem
ents: " "boost::generic::std_concept::SignedIntegralLike < short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::SignedIntegralLike < short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::SignedIntegralLike < int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SignedIntegralLike < int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::SignedIntegralLike < int > > ::value , "Concept map does not satisfy the following requirements: " "boost::ge
neric::std_concept::SignedIntegralLike < int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::SignedIntegralLike < int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::SignedIntegralLike < long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SignedIntegralLike < long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::SignedIntegralLike < long int > > ::value , "Concept map does not satisfy the following requirement
s: " "boost::generic::std_concept::SignedIntegralLike < long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::SignedIntegralLike < long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::SignedIntegralLike < long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SignedIntegralLike < long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::SignedIntegralLike < long long int > > ::value , "Concept map does not satisfy the follow
ing requirements: " "boost::generic::std_concept::SignedIntegralLike < long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::SignedIntegralLike < long long int > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/signed_integral_like.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,53 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SIGNED_INTEGRAL_LIKE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SIGNED_INTEGRAL_LIKE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+#include <boost/generic/std_concept/concepts/integral_like.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/signed_integral_like.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.arithmetic]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (SignedIntegralLike)( (typename) T )
+, ( public IntegralLike<T> )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::SignedIntegralLike)( signed char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::SignedIntegralLike)( short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::SignedIntegralLike)( int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::SignedIntegralLike)( long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::SignedIntegralLike)( long long int ) )
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SIGNED_INTEGRAL_LIKE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename F , typename T > class StrictWeakOrder; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implStrictWeakOrder { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename F , typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename F , typename T > struct boost_generic_detail_params_from_concept < StrictWeakOrder < F , T > > { typedef
 boost_generic_detail_params < F , T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename F , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Predicate<F,T,T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Predicate<F,T,T> > {}; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class Boos
tGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > , typename ::boost::generic::detail::always_void < Predicate<F,T,T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Predicate<F,T,T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < F , T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , F , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map StrictWeakOrder; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_de
tail_completed_concept_map_; typedef boost_generic_detail_params < F , T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename F , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , StrictWeakOrder < F , T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , T > type; }; template< typename F , typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_va
lid_ < StrictWeakOrder < F , T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , F , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStrictWeakOrder StrictWeakOrderBoostGenericDetailImpl; template< typename F , typename T > class StrictWeakOrder : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStrictWeakOrder:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StrictWeakOrder < F , T > > ::boost_generic_concept_map_impl , F , T > { ty
pedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStrictWeakOrder boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StrictWeakOrder < F , T > > ::boost_generic_concept_map_impl , F , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < F , T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Predicate<F,T,T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure
>::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename F , typename T > struct is_concept < ::boost:: generic:: std_concept:: StrictWeakOrder < F , T > > : mpl::true_ {}; template< typename F , typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: StrictWeakOrder < F , T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStrictWeakOrder type; }; } } } namespace boost_generic_concept_map_detail { template< typename F , typename T > struct concept_map_ < ::boos
t:: generic:: std_concept:: StrictWeakOrder < F , T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: StrictWeakOrder < F , T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/strict_weak_order.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_STRICT_WEAK_ORDER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_STRICT_WEAK_ORDER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/predicate.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/strict_weak_order.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.comparison]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (StrictWeakOrder)( (typename) F, (typename) T ), ( public Predicate<F,T,T> )
+, ( axiom Irreflexivity(F f, T a) { f(a, a) == false; } )
+, ( axiom Antisymmetry(F f, T a, T b) {
+ if (f(a, b))
+ f(b, a) == false;
+ }
+ )
+, ( axiom Transitivity(F f, T a, T b, T c) {
+ if (f(a, b) && f(b, c))
+ f(a, c) == true;
+ }
+ )
+, ( axiom TransitivityOfEquivalence(F f, T a, T b, T c) {
+ if (!f(a, b) && !f(b, a) && !f(b, c) && !f(c, b))
+ (!f(a, c) && !f(c, a)) == true;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_STRICT_WEAK_ORDER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Swappable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implSwappable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Swappable < T > > { typedef boost_generic_detail_params < T > type; }; template< class,
class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < HasSwap< T&, T& > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , HasSwap< T&, T& > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGe
nericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < HasSwap< T&, T& > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , HasSwap< T&, T& > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Swappable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::
type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Swappable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Swappable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; templa
te< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSwappable SwappableBoostGenericDetailImpl; template< typename T > class Swappable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSwappable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Swappable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSwappable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_g
eneric_concept_map_detail::concept_map_ < Swappable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < HasSwap< T&, T& > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)."
); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Swappable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Swappable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSwappable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Swappable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boo
st:: generic:: std_concept:: Swappable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/swappable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SWAPPABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SWAPPABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/has_swap.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/swappable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Swappable)( (typename) T )
+, ( public HasSwap< T&, T& > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_SWAPPABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 31 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class TriviallyCopyAssignable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTriviallyCopyAssignable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < TriviallyCopyAssignable < T > > { typedef boost_generic_deta
il_params < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < CopyAssignable< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , CopyAssignable< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::
generic::detail::always_void < True< has_trivial_assign< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< has_trivial_assign< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConce
ptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < CopyAssignable< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , CopyAssignable< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map TriviallyCopyAssignable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_
generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , TriviallyCopyAssignable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < TriviallyCopyAssignable < T > , BoostGenericDetailConceptMap > : b
oost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyAssignable TriviallyCopyAssignableBoostGenericDetailImpl; template< typename T > class TriviallyCopyAssignable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyAssignable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyCopyAssignable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generi
c_detail_concept_implTriviallyCopyAssignable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyCopyAssignable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < CopyAssignable< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; s
tatic_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< has_trivial_assign< T >::value > >::value , "requires " "True< has_trivial_assign< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: TriviallyCopyAssignable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: TriviallyCopyAssignable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyAssignable type; }; } } }
 namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: TriviallyCopyAssignable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: TriviallyCopyAssignable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_assignable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,46 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_ASSIGNABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_ASSIGNABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/copy_assignable.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/type_traits/has_trivial_assign.hpp>
+#endif
+
+//#include <type_traits>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/trivially_copy_assignable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (TriviallyCopyAssignable)( (typename) T )
+, ( public CopyAssignable< T > )
+, ( requires True< has_trivial_assign< T >::value > )
+//, ( requires True< std::is_trivially_copy_assignable< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_ASSIGNABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 31 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class TriviallyCopyConstructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTriviallyCopyConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < TriviallyCopyConstructible < T > > { typedef boost_gen
eric_detail_params < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < CopyConstructible< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , CopyConstructible< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typ
ename ::boost::generic::detail::always_void < True< has_trivial_copy_constructor< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< has_trivial_copy_constructor< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; temp
late< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < CopyConstructible< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , CopyConstructible< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map TriviallyCopyConstructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_d
etail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , TriviallyCopyConstructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < TriviallyCopyConstr
uctible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyConstructible TriviallyCopyConstructibleBoostGenericDetailImpl; template< typename T > class TriviallyCopyConstructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyCopyConstructible < T > > ::boost_generic_concept_map_impl
 , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyConstructible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyCopyConstructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < CopyConstructible< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_as
serts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< has_trivial_copy_constructor< T >::value > >::value , "requires " "True< has_trivial_copy_constructor< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: TriviallyCopyConstructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: TriviallyCopyConstructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_g
eneric_concept_impl_detail:: boost_generic_detail_concept_implTriviallyCopyConstructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: TriviallyCopyConstructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: TriviallyCopyConstructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_copy_constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,46 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/type_traits/has_trivial_copy.hpp>
+#endif
+
+//#include <type_traits>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/trivially_copy_constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.copymove]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (TriviallyCopyConstructible)( (typename) T )
+, ( public CopyConstructible< T > )
+, ( requires True< has_trivial_copy_constructor< T >::value > )
+//, ( requires True< std::is_trivially_copy_constructible< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_COPY_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 31 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class TriviallyDefaultConstructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTriviallyDefaultConstructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < TriviallyDefaultConstructible < T > > { typedef
boost_generic_detail_params < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < DefaultConstructible< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , DefaultConstructible< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypen
ames... > , typename ::boost::generic::detail::always_void < True< has_trivial_default_constructor<T>::value > >::type > : ::boost::generic::detail::concept_is_valid < True< has_trivial_default_constructor<T>::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_s
ucceeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < DefaultConstructible< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , DefaultConstructible< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map TriviallyDefaultConstructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_c
oncept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , TriviallyDefaultConstructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is
_valid_ < TriviallyDefaultConstructible < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDefaultConstructible TriviallyDefaultConstructibleBoostGenericDetailImpl; template< typename T > class TriviallyDefaultConstructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDefaultConstructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyDefaultConstru
ctible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDefaultConstructible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyDefaultConstructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < DefaultConstructible< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succe
eded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< has_trivial_default_constructor<T>::value > >::value , "requires " "True< has_trivial_default_constructor<T>::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: TriviallyDefaultConstructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: TriviallyDefaultConstructible < T > > { static bool const is_specialized = false; static bool const
 is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDefaultConstructible type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: TriviallyDefaultConstructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: TriviallyDefaultConstructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_default_constructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,46 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/default_constructible.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#endif
+
+//#include <type_traits>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/trivially_default_constructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.construct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (TriviallyDefaultConstructible)( (typename) T )
+, ( public DefaultConstructible< T > )
+, ( requires True< has_trivial_default_constructor<T>::value > )
+//, ( requires True< std::is_trivially_default_constructible<T>::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class TriviallyDestructible; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTriviallyDestructible { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < TriviallyDestructible < T > > { typedef boost_generic_detail_par
ams < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < NothrowDestructible< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , NothrowDestructible< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boo
st::generic::detail::always_void < True< has_trivial_destructor< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< has_trivial_destructor< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGeneri
cDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < NothrowDestructible< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , NothrowDestructible< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map TriviallyDestructible; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_
map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , TriviallyDestructible < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < TriviallyDestructible < T > , BoostGenericDetail
ConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDestructible TriviallyDestructibleBoostGenericDetailImpl; template< typename T > class TriviallyDestructible : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDestructible:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyDestructible < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_
generic_detail_concept_implTriviallyDestructible boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TriviallyDestructible < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < NothrowDestructible< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asse
rts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< has_trivial_destructor< T >::value > >::value , "requires " "True< has_trivial_destructor< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: TriviallyDestructible < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: TriviallyDestructible < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTriviallyDestructible type;
 }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: TriviallyDestructible < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: TriviallyDestructible < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/trivially_destructible.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,45 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DESTRUCTIBLE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DESTRUCTIBLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/nothrow_destructible.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/trivially_destructible.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.destruct]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (TriviallyDestructible)( (typename) T )
+, ( public NothrowDestructible< T > )
+ , ( requires True< has_trivial_destructor< T >::value > )
+// , ( requires True< std::is_trivially_destructible< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRIVIALLY_DESTRUCTIBLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/true.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/true.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< bool X > class True; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTrue { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< bool X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< bool X > struct boost_generic_detail_params_from_concept < True < X > > { typedef boost_generic_detail_params < X > type; }; template< class, class, class > struct boost_generic_de
tail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , bool X > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , bool X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , bool X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptM
ap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map True; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , bool X > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap
 , True < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< bool X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < True < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrue TrueBoostGenericDetailImpl; template< bool X > class True : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrue:: boost_generic_detail_completed_concept_map < typename ::
boost_generic_concept_map_detail::concept_map_ < True < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrue boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < True < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_m
ap ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< bool X > struct is_concept < ::boost:: generic:: std_concept:: True < X > > : mpl::true_ {}; template< bool X > struct concept_impl_of < ::boost:: generic:: std_concept:: True < X > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrue type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::True < true > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::True < true > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::True < true > > ::value , "Concept map does not satisfy the following requirements: " "boost::generic::std_concept::True < true >" ); s
tatic_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::True < true > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/true.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/true.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRUE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRUE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/true.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.true]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (True)( (bool) X )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::True)( true ) )
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_TRUE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,8 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class UnsignedIntegralLike; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implUnsignedIntegralLike { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < UnsignedIntegralLike < T > > { typedef boost_generic_detail_params < T > type
; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < IntegralLike<T> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , IntegralLike<T> > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_
concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < IntegralLike<T> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , IntegralLike<T> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map UnsignedIntegralLike; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef :
:boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , UnsignedIntegralLike < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < UnsignedIntegralLike < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap
, T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnsignedIntegralLike UnsignedIntegralLikeBoostGenericDetailImpl; template< typename T > class UnsignedIntegralLike : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnsignedIntegralLike:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < UnsignedIntegralLike < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnsignedIntegralLike boost_generic_detail_concept_impl; typedef typ
ename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < UnsignedIntegralLike < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < IntegralLike<T> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeed
ed::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: UnsignedIntegralLike < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: UnsignedIntegralLike < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnsignedIntegralLike type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::UnsignedIntegralLike < unsigned char > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::UnsignedIntegralLike < unsigned char > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::UnsignedIntegralLike < unsigned char > > ::value , "Concept map does not satisfy the
following requirements: " "boost::generic::std_concept::UnsignedIntegralLike < unsigned char >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::UnsignedIntegralLike < unsigned char > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::UnsignedIntegralLike < unsigned short int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::UnsignedIntegralLike < unsigned short int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::UnsignedIntegralLike < unsigned short int > > ::value , "Concept map does n
ot satisfy the following requirements: " "boost::generic::std_concept::UnsignedIntegralLike < unsigned short int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::UnsignedIntegralLike < unsigned short int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::UnsignedIntegralLike < unsigned int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::UnsignedIntegralLike < unsigned int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::UnsignedIntegralLike < unsigned int > > ::value , "Concept map does not satisfy the fol
lowing requirements: " "boost::generic::std_concept::UnsignedIntegralLike < unsigned int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::UnsignedIntegralLike < unsigned int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::UnsignedIntegralLike < unsigned long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::UnsignedIntegralLike < unsigned long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::UnsignedIntegralLike < unsigned long int > > ::value , "Concept map does not
satisfy the following requirements: " "boost::generic::std_concept::UnsignedIntegralLike < unsigned long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::UnsignedIntegralLike < unsigned long int > > () ) >::type::value , "This message should never be seen." );
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template<> struct concept_map_ < boost::generic::std_concept::UnsignedIntegralLike < unsigned long long int > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::UnsignedIntegralLike < unsigned long long int > >() ) instantiate_; }; }; } static_assert ( ::boost::generic::detail::concept_is_valid < boost::generic::std_concept::UnsignedIntegralLike < unsigned long long int > > ::value , "Concep
t map does not satisfy the following requirements: " "boost::generic::std_concept::UnsignedIntegralLike < unsigned long long int >" ); static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < boost::generic::std_concept::UnsignedIntegralLike < unsigned long long int > > () ) >::type::value , "This message should never be seen." );
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/concepts/unsigned_integral_like.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,53 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONCEPTS_UNSIGNED_INTEGRAL_LIKE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONCEPTS_UNSIGNED_INTEGRAL_LIKE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+#include <boost/generic/std_concept/concepts/integral_like.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/concepts/unsigned_integral_like.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.arithmetic]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (UnsignedIntegralLike)( (typename) T )
+, ( public IntegralLike<T> )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::UnsignedIntegralLike)( unsigned char ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::UnsignedIntegralLike)( unsigned short int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::UnsignedIntegralLike)( unsigned int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::UnsignedIntegralLike)( unsigned long int ) )
+
+BOOST_GENERIC_CONCEPT_MAP
+((boost::generic::std_concept::UnsignedIntegralLike)( unsigned long long int ))
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONCEPTS_UNSIGNED_INTEGRAL_LIKE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS
+
+// [container.concepts.free]
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+#include <boost/generic/std_concept/container_concepts/front_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/back_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/stack_like_container.hpp>
+#include <boost/generic/std_concept/container_concepts/queue_like_container.hpp>
+#include <boost/generic/std_concept/container_concepts/insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/range_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/front_emplacement_container.hpp>
+#include <boost/generic/std_concept/container_concepts/back_emplacement_container.hpp>
+#include <boost/generic/std_concept/container_concepts/emplacement_container.hpp>
+
+// [container.concepts.member]
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_stack_like_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_queue_like_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_range_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_front_emplacement_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_back_emplacement_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_emplacement_container.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class BackEmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implBackEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_from_concept < BackEmplacem
entContainer < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type emplace_back (); template< class Boost
GenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( emplace_back (::std::declval< C& >() , ::std::declval< Args&& >() ...) ) ) >::type > { typedef decltype ( emplace_back (::std::declval< C& >() , ::std::declval< Args&& >() ...) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >:
:value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detai
l_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map BackEmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detai
l_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , BackEmplacementContainer < C , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < BackEmplacementContaine
r < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackEmplacementContainer BackEmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class BackEmplacementContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackEmplacementContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < BackEmplacementContainer < C , Args... > >
 ::boost_generic_concept_map_impl , C , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < BackEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_su
cceeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "emplace_back" "( " "C& c , Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map ,
 boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "emplace_back" "( " "C& c , Args&&... args" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: BackEmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: BackEmplacementContainer < C , Args... > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implB
ackEmplacementContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/back_emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+#include <boost/generic/std_concept/container_concepts/stack_like_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/back_emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (BackEmplacementContainer)( (typename) C, (typename,,,) Args ), ( public Container<C> )
+, ( (void)(emplace_back)( (C&) c, (Args&&,,,) args) )
+
+// TODO support this
+//, ( requires ( StackLikeContainer<C>, Constructible<typename Container<C>::value_type, Args...> )
+// axiom BackEmplacement(C c, Args... args) {
+// typename Container<C>::value_type(args...) == (emplace_back(c, args...), back(c));
+// }
+// )
+//
+//, ( requires ( requires StackLikeContainer<C>, Constructible<typename Container<C>::value_type, Args...> )
+// axiom BackEmplacementPushEquivalence(C c, Args... args) {
+// (emplace_back(c, args...), back(c)) == (push_back(c, typename Container<C>::value_type(args...)), back(c));
+// }
+// )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class BackInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implBackInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < BackInsertionContainer < C > > { typedef boost_generic_detail_params < C
> type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type push_back (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_
type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( push_back (::std::declval< C& >() , ::std::declval< typename Container<C>::value_type&& >()) ) ) >::type > { typedef decltype ( push_back (::std::declval< C& >() , ::std::declval< typename Container<C>::value_type&& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::m
pl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_de
tail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map BackInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_de
tail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , BackInsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < BackInsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::bo
ost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackInsertionContainer BackInsertionContainerBoostGenericDetailImpl; template< typename C > class BackInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < BackInsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_
detail::concept_map_ < BackInsertionContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public:
private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "push_back" "( " "C& , typename Container<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >
::value , "the return type of " "push_back" "( " "C& , typename Container<C>::value_type&&" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: BackInsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: BackInsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBackInsertionContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/back_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/back_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (BackInsertionContainer)( (typename) C ), ( public Container<C> )
+, ( (void)(push_back)( (C&), (typename Container<C>::value_type&&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_BACK_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class Container; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < Container < C > > { typedef boost_generic_detail_params < C > type; }; template< class, class, clas
s > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedvalue_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: value_type >::type > { typedef typename BoostGenericDetailConceptMap:: value_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultvalue_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultvalue_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < Boost
GenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::value_type >::type > { typedef typename C::value_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passvalue_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultvalue_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requ
ires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ObjectType < value_type > >::type > : ::boost::generic::detail::concept_is_valid < ObjectType < value_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct b
oost_generic_detail_providedreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedreference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: reference >::type > { typedef typename BoostGenericDetailConceptMap:: reference type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename C , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultreference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::reference >::type > { typedef typename C::reference t
ype; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedreference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passreference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultreference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedconst_reference { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_provide
dconst_reference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: const_reference >::type > { typedef typename BoostGenericDetailConceptMap:: const_reference type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultconst_reference { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< typename C , class value_type , class reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultconst_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::const_reference >::type > { typedef typename C::const_reference type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDeta
ilTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedconst_reference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passconst_reference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultconst_reference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedsize_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedsize_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typen
ame BoostGenericDetailConceptMap:: size_type >::type > { typedef typename BoostGenericDetailConceptMap:: size_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultsize_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template< typename C , class value_type , class reference , class const_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultsize_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::size_type >::type > { typedef typename C::size_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedsize_ty
pe < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passsize_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultsize_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference
, const_reference , size_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < UnsignedIntegralLike < size_type > >::type > : ::boost::generic::detail::concept_is_valid < UnsignedIntegralLike < size_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passiterator { typedef ::boost::generic::detail::dummy_type_< 6 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passiterator < BoostGenericDetailConceptMap , typename ::boo
st::generic::detail::always_void < typename BoostGenericDetailConceptMap:: iterator >::type > { typedef typename BoostGenericDetailConceptMap:: iterator type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ForwardIterator < iterator > >::type > : ::boost::generic::detail::concept_is_valid < ForwardIterator < iterator > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDe
tailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passconst_iterator { typedef ::boost::generic::detail::dummy_type_< 7 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passconst_iterator < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: const_iterator >::type > { typedef typename BoostGenericDetailConceptMap:: const_iterator type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_co
nstant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ForwardIterator < const_iterator > >::type > : ::boost::generic::detail::concept_is_valid < ForwardIterator < const_iterator > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGe
nericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<reference, const_reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<reference, const_reference> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_r
equires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<reference, const value_type&> >::type > : :
:boost::generic::detail::concept_is_valid < Convertible<reference, const value_type&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_7 < boost_generic_detail_params < C > , ::boost::generic::detail::typ
e_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<reference, const value_type&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<reference, const value_type&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_8 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const
_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_8 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<const_reference, const value_type&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<const_reference, const value_type&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_8 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class
BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_9 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_9 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<iterator, const_iterator> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<iterator, const_iterator> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_9 : ::boost::mpl::and_ < boost_generic_detail_requires_ar
e_valid_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_9 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_10 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_10 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<iterator>::value_type, value_type> >::type > : ::boost::generic::detail::concept_is_valid < Sa
meType<typename ForwardIterator<iterator>::value_type, value_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_10 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_10 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_11 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_11 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_
type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<const_iterator>::value_type, value_type> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<const_iterator>::value_type, value_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_11 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_11 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_12 : ::std::integral_constant< bool, false > {}; template< typena
me C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_12 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<iterator>::reference, reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::reference, reference> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_12 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_11 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl
_requires_are_valid_12 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_13 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_13 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> > {}; template< class BoostGener
icDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_13 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_12 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_13 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_14 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_14 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOth
erTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_14 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_13 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_14 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_15 : ::std::integral_constant< bool, false > {}; template< typename C ,
 class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_15 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < IntegralType<size_type> >::type > : ::boost::generic::detail::concept_is_valid < IntegralType<size_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_15 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_14 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_15 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< c
lass BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_16 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_16 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_
detail_requires_are_valid_16 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_16 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passvalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < void****** > >::type value_type ; typedef typename boost_generic_detail_first_passreference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , void****** > >::type reference ; typedef typename boost_generic_detail_first_passconst_reference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , void****** > >::t
ype const_reference ; typedef typename boost_generic_detail_first_passsize_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , void****** > >::type size_type ; typedef typename boost_generic_detail_first_passiterator < BoostGenericDetailConceptMap >::type iterator ; typedef typename boost_generic_detail_first_passconst_iterator < BoostGenericDetailConceptMap >::type const_iterator ; }; template< class, class, class > struct boost_generic_detail_deduce_0value_type { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0const_reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0size_type { typedef ::boost::generic::detail::no
_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0iterator { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0const_iterator { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type begin (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::de
tail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( begin (::std::declval< C& >()) ) ) >::type > { typedef decltype ( begin (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGeneri
cDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_det
ail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetail
Params, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDeta
ilAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class refe
rence > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , bo
ost_generic_detail_impl_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailA
ugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::de
tail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic
_detail_impl_this_deduce_1const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGeneric
DetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail:
:type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1siz
e_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterato
r, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::
boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailPar
ams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... Boo
stGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator
> ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGeneri
cDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type begin (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::deta
il::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( begin (::std::declval< const C& >()) ) ) >::type > { typedef decltype ( begin (::std::declval< const C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailPar
ams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference
reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGen
ericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2value_type < BoostGenericDetai
lConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailA
ugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::ty
pe {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGe
nericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference;
typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; temp
late< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2const_reference < BoostGenericDetailConceptMap , BoostGenericDe
tailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_refe
rence; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class Boost
GenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {};
 template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type siz
e_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPar
ams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGene
ricDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator
iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGeneri
cDetailTypenames > struct boost_generic_detail_this_deduce_2const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDet
ailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type end (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( end (::std::declval< C& >()) ) ) >::type > { typedef decltype ( end (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConcep
tMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3value_type < boost_generic_detail_params < C > , ::boost::generic::detail::typ
e_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce
_3value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams,
class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, Bo
ostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3reference : ::boost::mpl::identity < decltyp
e( boost_generic_detail_impl_funs_deduce_3reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_g
eneric_detail_deduce_3reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGeneri
cDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3const_reference : ::boost::mpl::identity < decltype( boost_generic_detail
_impl_funs_deduce_3const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generi
c_detail_deduce_3const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGener
icDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce
_3size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3size_type : ::boos
t::generic::detail::deduction_result < typename boost_generic_detail_deduce_2size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_t
ype, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3iterator< BoostGenericDetailParams, BoostGenericDetailTy
penames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3iterator : ::boost::generic::detail::deduction_result < typename boost_generic_
detail_deduce_2iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDeta
ilAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_de
tail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_ded
uce_2const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type end (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_4 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_4 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , referen
ce , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( end (::std::declval< const C& >()) ) ) >::type > { typedef decltype ( end (::std::declval< const C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_4 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class Boo
stGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); templa
te< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDeta
ilTypenames >::value , boost_generic_detail_impl_this_deduce_4value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, cl
ass BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::
generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail
_impl_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class
 BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const
_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl
_this_deduce_4const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsiz
e_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size
_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4size_type
 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, cla
ss BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost:
:generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4iterator < BoostGenericDetailConceptMap , BoostGenericDetailPar
ams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... Boo
stGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_it
erator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, Boost
GenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type cbegin (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_5 { typedef ::boost::generi
c::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_5 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( cbegin (::std::declval< const C& >()) ) ) >::type > { typedef decltype ( cbegin (::std::declval< const C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_5 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_5 < BoostGeneric
DetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugr
eference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams,
 BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5value_type < BoostGen
ericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGener
icDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >()
) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5reference < BoostGenericDetailConceptMap , BoostGenericDetailParams
, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_re
ference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type
 {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5const_reference < BoostGenericDetailConceptMap , Boost
GenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference c
onst_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< cl
ass BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypename
s > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize
_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGeneric
DetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class
BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAug
iterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class Bo
ostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostG
enericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type cend (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_6 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_6 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( cend (::std::declval< const C& >()) ) ) >::type > { typedef decltype ( cend (::std::declval< const C& >()) ) type; }; template< class
BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_6 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6value_type < boost_generic_detail_params < C > , ::boo
st::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_g
eneric_detail_impl_this_deduce_6value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , cl
ass BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < Boost
GenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6referenc
e : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGen
ericDetailTypenames > struct boost_generic_detail_deduce_6reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGe
nericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6const_reference : ::boost::mpl:
:identity < decltype( boost_generic_detail_impl_funs_deduce_6const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGe
nericDetailTypenames > struct boost_generic_detail_deduce_6const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type,
BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6size_type : ::boost::mpl::identity <
 decltype( boost_generic_detail_impl_funs_deduce_6size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct
 boost_generic_detail_deduce_6size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetai
lAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6it
erator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6iterator : ::boost::gener
ic::detail::deduction_result < typename boost_generic_detail_deduce_5iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize
_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6const_iterator< BoostGenericDe
tailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6const_iterator : ::boost::generic::
detail::deduction_result < typename boost_generic_detail_deduce_5const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type front (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_7 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_7 < boost_generic_detail_params < C
> , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( front (::std::declval< C& >()) ) ) >::type > { typedef decltype ( front (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_7 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7value_type; template< typename C , class BoostGenericDetailAugvalue
_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_
type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConcep
tMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreferenc
e, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ..
. ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDet
ailTypenames >::value , boost_generic_detail_impl_this_deduce_7reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference,
 class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > s
tatic ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenam
es >::value , boost_generic_detail_impl_this_deduce_7const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_re
ference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > stati
c ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_
detail_impl_this_deduce_7size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class
BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_gen
eric_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7iterator < BoostGenericDetailConce
ptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAu
gconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::gene
ric::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_16 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7const_iterator < BoostGenericDetailConceptMap , BoostGe
nericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducevalue_type : boost_generic_detail_deduce_7value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class Bo
ostGenericDetailTypenames > struct boost_generic_detail_deducereference : boost_generic_detail_deduce_7reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceconst_reference : boost_generic_detail_deduce_7const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducesize_type : boost_generic_detail_deduce_7size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceiterator : boost_generic_detail_deduce_7iterator < BoostGenericDetailC
onceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceconst_iterator : boost_generic_detail_deduce_7const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct
 boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Container; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: value_type >::value , boost_generic_detail_deducevalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: value_type, typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iter
ator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: value_type > >::type value_type; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: reference >::value , boost_generic_detail_deducereference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type, typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: reference > >::type reference; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers::
 const_reference >::value , boost_generic_detail_deduceconst_reference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: const_reference > >::type const_reference; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: size_type >::value , boost_generic_detail_deducesize_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_de
tail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: size_type > >::type size_type; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: iterator >::value , boost_generic_detail_deduceiterator < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: iterator > >::type iterator; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: const_iterator >::value , boost_generic_detail_deducecons
t_iterator < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: const_iterator > >::type const_iterator; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: value_type, typename boost_generic_detail_completed_concept_map_:: reference, typename boost_generic_detail_completed_concept_map_:: const_reference, typename boost_generic_detail_completed_concept_map_:: size_type, typename boost_generic_detail_completed_concept_map_:: iterator, typenam
e boost_generic_detail_completed_concept_map_:: const_iterator, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_16< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< value_type > , ::boost::generic::detail::is_not_deduction_error< reference > , ::boost::generic::detail::is_not_deduction_error< const_reference > , ::boost::generic::detail::is_not_deduction_error< size_type > , ::boost::generic::detail::is_not_deduction_error< iterator > , ::boost::generic::detail::is_not_deduction_error< const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typen
ames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < b
oost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iter
ator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , reference > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class Boo
stGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Container < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Container < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implContainer ContainerBoostGenericDetailImpl; templa
te< typename C > class Container : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Container < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Container < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_su
cceeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: value_type value_type; typedef typename boost_generic_detail_completed_concept_map:: reference reference; typedef typename boost_generic_detail_completed_concept_map:: const_reference const_reference; typedef typename boost_generic_detail_completed_concept_map:: size_type size_type; typedef typename boost_generic_detail_completed_concept_map:: iterator iterator; typedef typename boost_generic_detail_completed_concept_map:: const_iterator const_iterator; private: typedef ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , v
oid > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename Container :: value_type , ::boost::generic::detail::no_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: value_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Container :: value_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Container :: value_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ObjectType < typename Container :: value_type > > >::value , "typename '" "value_type" "' does not model '" "ObjectType" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: reference , ::boost::gen
eric::detail::no_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: const_reference , ::boost::generic::detail::no_deduction >::value , "typename '" "const_reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: const_reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "const_reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: size_type , ::boost::generic::detail::no_deduction >::value , "typename '" "size_type"
"' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: size_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "size_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Container :: size_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Container :: size_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < UnsignedIntegralLike < typename Container :: size_type > > >::value , "typename '" "size_type" "' does not model '" "UnsignedIntegralLike" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: iterator , ::boost::generic::detail::no_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Contai
ner :: iterator , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Container :: iterator , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Container :: iterator , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ForwardIterator < typename Container :: iterator > > >::value , "typename '" "iterator" "' does not model '" "ForwardIterator" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: const_iterator , ::boost::generic::detail::no_deduction >::value , "typename '" "const_iterator" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Container :: const_iterator , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "const_iterator" "' was not explicitly s
atisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Container :: const_iterator , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Container :: const_iterator , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ForwardIterator < typename Container :: const_iterator > > >::value , "typename '" "const_iterator" "' does not model '" "ForwardIterator" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<reference, const_reference> >::value , "requires " "Convertible<reference, const_reference>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<reference, const value_type&> >::value , "requires " "Convertible<reference, const value_type&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<reference, const value_type&> >::value , "requires " "Convertible<reference, const value_type&>" ); static_assert ( ::boos
t::generic::detail::concept_is_valid < Convertible<const_reference, const value_type&> >::value , "requires " "Convertible<const_reference, const value_type&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<iterator, const_iterator> >::value , "requires " "Convertible<iterator, const_iterator>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::value_type, value_type> >::value , "requires " "SameType<typename ForwardIterator<iterator>::value_type, value_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<const_iterator>::value_type, value_type> >::value , "requires " "SameType<typename ForwardIterator<const_iterator>::value_type, value_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::reference, reference> >::value , "requires " "Convertible<typename ForwardIterator<iterator>::reference, reference>" );
static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> >::value , "requires " "Convertible<typename ForwardIterator<const_iterator>::reference, const_reference>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type> >::value , "requires " "SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < IntegralType<size_type> >::value , "requires " "IntegralType<size_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> >::value , "requires " "Convertible<typename ForwardIterator<iterator>::difference_type, size_type>" ); static_assert ( ::boost::generic::detail::is_not_dummy_type <
 typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "begin" "( " "C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , iterator > >::value , "the return type of " "begin" "( " "C&" " ) " "is not convertible to " "iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detai
l_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "begin" "( " "const C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_iterator > >::value , "the return type of " "begin" "( " "const C&" " ) " "is not convertible to " "const_iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_deta
il_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "end" "( " "C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , iterator > >::value , "the return type of " "end" "( " "C&" " ) " "is not convertible to " "iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_
generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "end" "( " "const C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_iterator > >::value , "the return type of " "end" "( " "const C&" " ) " "is not convertible to " "const_iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_gen
eric_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "cbegin" "( " "const C& c" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_iterator > >::value , "the return type of " "cbegin" "( " "const C& c" " ) " "is not convertible to " "const_iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template bo
ost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "cend" "( " "const C& c" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_iterator > >::value , "the return type of " "cend" "( " "const C& c" " ) " "is not convertible to " "const_iterator" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template
 boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "reference" " " "front" "( " "C& c" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , reference > >::value , "the return type of " "front" "( " "C& c" " ) " "is not convertible to " "reference" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_conc
ept:: Container < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: Container < C > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,81 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Container)( (typename) C )
+, ( (ObjectType) value_type , typename C::value_type )
+, ( typename reference , typename C::reference )
+, ( typename const_reference , typename C::const_reference )
+, ( (UnsignedIntegralLike) size_type, typename C::size_type )
+
+, ( (ForwardIterator) iterator )
+, ( (ForwardIterator) const_iterator )
+
+, ( requires Convertible<reference, const_reference> )
+, ( requires Convertible<reference, const value_type&> )
+, ( requires Convertible<reference, const value_type&> )
+, ( requires Convertible<const_reference, const value_type&> )
+, ( requires Convertible<iterator, const_iterator> )
+, ( requires SameType<typename ForwardIterator<iterator>::value_type, value_type> )
+, ( requires SameType<typename ForwardIterator<const_iterator>::value_type, value_type> )
+, ( requires Convertible<typename ForwardIterator<iterator>::reference, reference> )
+, ( requires Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> )
+, ( requires SameType<typename ForwardIterator<iterator>::difference_type,
+ typename ForwardIterator<const_iterator>::difference_type> )
+, ( requires IntegralType<size_type> )
+, ( requires Convertible<typename ForwardIterator<iterator>::difference_type, size_type> )
+
+, ( (iterator)(begin)( (C&) ) )
+, ( (const_iterator)(begin)( (const C&)) )
+, ( (iterator)(end)( (C&) ) )
+, ( (const_iterator)(end)( (const C&) ) )
+, ( (const_iterator)(cbegin)( (const C&) c ), { return begin(c); } )
+, ( (const_iterator)(cend)( (const C&) c ), { return end(c); } )
+, ( (reference)(front)( (C&) c ), { return *begin(c); } )
+
+, ( axiom AccessFront(C c) {
+ if (begin(c) != end(c)) front(c) == *begin(c);
+ }
+ )
+
+, ( axiom ContainerSize(C c) {
+ (begin(c) == end(c)) == empty(c);
+ (begin(c) != end(c)) == (size(c) > 0);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class EmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_from_concept < EmplacementContainer
 < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type emplace (); template< class BoostGenericDetailPara
ms , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( emplace (::std::declval< C& >() , ::std::declval< typename Container<C>::const_iterator >() , ::std::declval< Args&& >() ...) ) ) >::type > { typedef decltype ( emplace (::std::declval< C& >() , ::std::declval< typename Container<C>::const_iterator >() , ::std::declval< Args&& >() ...) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_vali
d_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< cl
ass BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map EmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost
_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename Container<C>::iterator > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , EmplacementContainer < C , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typenam
e... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < EmplacementContainer < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEmplacementContainer EmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class EmplacementContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEmplacementContainer:: boost_generic_detail_completed_concept_map < typename :
:boost_generic_concept_map_detail::concept_map_ < EmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional <
 boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename Container<C>::iterator" " " "emplace" "( " "C& c , typename Container<C>::const_iterator position , Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::
is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename Container<C>::iterator > >::value , "the return type of " "emplace" "( " "C& c , typename Container<C>::const_iterator position , Args&&... args" " ) " "is not convertible to " "typename Container<C>::iterator" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: EmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic::
std_concept:: EmplacementContainer < C , Args... > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEmplacementContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+#include <boost/generic/std_concept/container_concepts/insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (EmplacementContainer)( (typename) C, (typename,,,) Args ), ( public Container<C> )
+, ( (typename Container<C>::iterator)(emplace)( (C&) c, (typename Container<C>::const_iterator) position, (Args&&,,,) args) )
+
+// TODO support this
+//, ( requires ( Constructible<typename Container<C>::value_type, Args...> )
+// axiom Emplacement(C c, const_iterator position, Args... args) {
+// typename Container<C>::value_type(args...) == *emplace(c, position, args...);
+// }
+// )
+//
+//, ( requires ( InsertionContainer<C>, Constructible<typename Container<C>::value_type, Args...> )
+// axiom EmplacementPushEquivalence(C c, const_iterator position, Args... args) {
+// *emplace(c, position, args...) == *insert(c, position, value_type(args...));
+// }
+// )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class FrontEmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implFrontEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_from_concept < FrontEmpla
cementContainer < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_param
s < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Constructible<typename Container<C>::value_type, Args...> >::type > : ::boost::generic::detail::concept_is_valid < Constructible<typename Container<C>::value_type, Args...> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename C , typename... Args , class... BoostGenericDetailOthe
rTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < FrontInsertionContainer<C> >::type > : ::boost::generic::detail::concept_is_valid < FrontInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename C , typename... Args
, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Constructible<typename Container<C>::value_type, Args...> >::type > : ::boost::generic::detail::concept_is_valid < Constructible<typename Container<C>::value_type, Args...> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class
 BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type emplace_front (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( emplace_front (::std::declval< C& >() , ::std::declval< Args&& >() ...) ) ) >::type > { typedef decltype ( emplace_front (::std::declval< C& >() , ::std::declval< Args&& >() ...) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , cla
ss BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bas
es < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map FrontEmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typen
ame boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_3< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , FrontEmplacementContainer < C , Args... > > { typedef boost_gene
ric_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < FrontEmplacementContainer < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontEmplacementContainer FrontEmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class FrontEmplacementContainer : boost_ge
neric_concept_impl_detail:: boost_generic_detail_concept_implFrontEmplacementContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FrontEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FrontEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype
 ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "emplace_front" "( " "C& c
 , Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "emplace_front" "( " "C& c , Args&&... args" " ) " "is not convertible to " "void" " " ); static_assert ( ::boost::generic::detail::concept_is_valid < Constructible<typename Container<C>::value_type, Args...> >::value , "requires " "Constructible<typename Container<C>::value_type, Args...>" ); static_assert ( ::boost::generic::detail::concept_is_valid < FrontInsertionContainer<C> >::value , "requires
 " "FrontInsertionContainer<C>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Constructible<typename Container<C>::value_type, Args...> >::value , "requires " "Constructible<typename Container<C>::value_type, Args...>" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: FrontEmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: FrontEmplacementContainer < C , Args... > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontEmplacementContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/front_emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+#include <boost/generic/std_concept/container_concepts/front_insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/front_emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (FrontEmplacementContainer)( (typename) C, (typename,,,) Args ), ( public Container<C> )
+, ( (void)(emplace_front)( (C&) c, (Args&&,,,) args) )
+
+, ( requires Constructible<typename Container<C>::value_type, Args...> )
+, ( axiom FrontEmplacement(C c, Args... args) {
+ value_type(args...) == (emplace_front(c, args...), front(c));
+ }
+ )
+
+, ( requires FrontInsertionContainer<C> )
+, ( requires Constructible<typename Container<C>::value_type, Args...> )
+, ( axiom FrontEmplacementPushEquivalence(C c, Args... args) {
+ (emplace_front(c, args...), front(c)) == (push_front(c, value_type(args...)), front(c));
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class FrontInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implFrontInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < FrontInsertionContainer < C > > { typedef boost_generic_detail_params <
 C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type push_front (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_ret
urn_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( push_front (::std::declval< C& >() , ::std::declval< typename Container<C>::value_type&& >()) ) ) >::type > { typedef decltype ( push_front (::std::declval< C& >() , ::std::declval< typename Container<C>::value_type&& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::bo
ost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_gene
ric_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map FrontInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_gen
eric_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , FrontInsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < FrontInsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = type
name ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontInsertionContainer FrontInsertionContainerBoostGenericDetailImpl; template< typename C > class FrontInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FrontInsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_gener
ic_concept_map_detail::concept_map_ < FrontInsertionContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to voi
d)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "push_front" "( " "C& , typename Container<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >
::type , void > >::value , "the return type of " "push_front" "( " "C& , typename Container<C>::value_type&&" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: FrontInsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: FrontInsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFrontInsertionContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/front_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/front_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (FrontInsertionContainer)( (typename) C ), ( public Container<C> )
+, ( (void)(push_front)( (C&), (typename Container<C>::value_type&&) ) )
+
+, ( axiom FrontInsertion(C c, typename Container<C>::value_type x) {
+ x == (push_front(c, x), front(c));
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_FRONT_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class InsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < InsertionContainer < C > > { typedef boost_generic_detail_params < C > type; }; t
emplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Container<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Container<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type insert (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { t
ypedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( insert (::std::declval< C& >() , ::std::declval< typename Container<C>::const_iterator >() , ::std::declval< typename Container<C>::value_type&& >()) ) ) >::type > { typedef decltype ( insert (::std::declval< C& >() , ::std::declval< typename Container<C>::const_iterator >() , ::std::declval< typename Container<C>::value_type&& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_gener
ic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < Container<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Container<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < Boo
stGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map InsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_
1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename Container<C>::iterator > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , InsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < InsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is
_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInsertionContainer InsertionContainerBoostGenericDetailImpl; template< typename C > class InsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < InsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::t
emplate boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < InsertionContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Container<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substitute
d into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename Container<C>::iterator" " " "insert" "( " "C& , typename Container<C>::const_iterator , typename Container<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_gene
ric_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename Container<C>::iterator > >::value , "the return type of " "insert" "( " "C& , typename Container<C>::const_iterator , typename Container<C>::value_type&&" " ) " "is not convertible to " "typename Container<C>::iterator" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: InsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: InsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInsertionContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (InsertionContainer)( (typename) C ), ( public Container<C> )
+, ( (typename Container<C>::iterator)(insert)( (C&), (typename Container<C>::const_iterator), (typename Container<C>::value_type&&) ) )
+
+, ( axiom Insertion(C c, const_iterator position, value_type v) {
+ v == *insert(c, position, v);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class MemberBackEmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberBackEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_from
_concept < MemberBackEmplacementContainer < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typed
ef ::boost::generic::detail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . emplace_back ( ::std::declval< Args&& >() ... ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . emplace_back ( ::std::declval< Args&& >() ... ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::
detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_det
ail_params < C , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberBackEmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 <
 boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberBackEmplacementContainer < C , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberBackEmplacementContainer < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map
 < BoostGenericDetailConceptMap , C , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackEmplacementContainer MemberBackEmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class MemberBackEmplacementContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackEmplacementContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberBackEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > { typedef boost
_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberBackEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberBackInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_as
serts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "emplace_back" "( " "Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, bo
ost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "emplace_back" "( " "Args&&... args" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: MemberBackEmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberBackEmplacementContainer < C , Args... > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackEmplacementCo
ntainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: MemberBackEmplacementContainer < C , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberBackEmplacementContainer < C , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_stack_like_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_back_emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberBackEmplacementContainer)( (typename) C, (typename,,,) Args ), ( public MemberBackInsertionContainer<C> )
+, ( (void)(this(C) emplace_back)( (Args&&,,,) args ) )
+
+// TODO support this
+//, ( requires ( MemberStackLikeContainer<C>, Constructible<typename MemberBackInsertionContainer<C>::value_type, Args...> )
+// axiom MemberBackEmplacement(C c, Args... args) {
+// typename MemberBackInsertionContainer<C>::value_type(args...) == (c.emplace_back(args...), c.back());
+// }
+// )
+//
+//, ( requires ( MemberStackLikeContainer<C>, Constructible<typename MemberBackInsertionContainer<C>::value_type, Args...> )
+// axiom MemberBackEmplacementPushEquivalence(C c, Args... args) {
+// (c.emplace_back(args...), c.back()) == (c.push_back(value_type(args...)), c.back());
+// }
+// )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberBackInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberBackInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberBackInsertionContainer < C > > { typedef boo
st_generic_detail_params < C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_i
mpl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . push_back ( ::std::declval< C& >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . push_back ( ::std::declval< C& >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_d
etail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef
 boost_generic_detail_completed_concept_map MemberBackInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typena
me boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberBackInsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberBackInsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams
> ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackInsertionContainer MemberBackInsertionContainerBoostGenericDetailImpl; template< typename C > class MemberBackInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberBackInsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberBackInsertionCont
ainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic:
:detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "push_back" "( " "C& , typename MemberContainer<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the retu
rn type of " "C" "::" "push_back" "( " "C& , typename MemberContainer<C>::value_type&&" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: MemberBackInsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberBackInsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberBackInsertionContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: MemberBackInsertionContainer < C > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { t
ypedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberBackInsertionContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_back_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberBackInsertionContainer)( (typename) C ), ( public MemberContainer<C> )
+, ( (void)(this(C) push_back)( (C&), (typename MemberContainer<C>::value_type&&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_BACK_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberContainer < C > > { typedef boost_generic_detail_params < C > type; };
 template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedvalue_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: value_type >::type > { typedef typename BoostGenericDetailConceptMap:: value_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultvalue_type { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultvalue_type < boost_generic_detail_params < C > , ::boost::gener
ic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::value_type >::type > { typedef typename C::value_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passvalue_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultvalue_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct b
oost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ObjectType < value_type > >::type > : ::boost::generic::detail::concept_is_valid < ObjectType < value_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDe
tailEnabler = void > struct boost_generic_detail_providedreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedreference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: reference >::type > { typedef typename BoostGenericDetailConceptMap:: reference type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename C , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultreference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::reference >::type > { ty
pedef typename C::reference type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedreference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passreference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultreference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedconst_reference { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< class BoostGenericDetailConceptMap > struct
 boost_generic_detail_providedconst_reference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: const_reference >::type > { typedef typename BoostGenericDetailConceptMap:: const_reference type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultconst_reference { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< typename C , class value_type , class reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultconst_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::const_reference >::type > { typedef typename C::const_reference type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPa
rams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedconst_reference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passconst_reference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultconst_reference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedsize_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedsize_type < BoostGenericDetailConceptMap , typename ::boost::generic
::detail::always_void < typename BoostGenericDetailConceptMap:: size_type >::type > { typedef typename BoostGenericDetailConceptMap:: size_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultsize_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template< typename C , class value_type , class reference , class const_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultsize_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::size_type >::type > { typedef typename C::size_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_g
eneric_detail_providedsize_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passsize_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultsize_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_l
ist < value_type , reference , const_reference , size_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < UnsignedIntegralLike < size_type > >::type > : ::boost::generic::detail::concept_is_valid < UnsignedIntegralLike < size_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providediterator { typedef ::boost::generic::detail::dummy_type_< 6 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providediterator < BoostGenericDetailCo
nceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: iterator >::type > { typedef typename BoostGenericDetailConceptMap:: iterator type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultiterator { typedef ::boost::generic::detail::dummy_type_< 6 > type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultiterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::iterator >::type > { typedef typename C::iterator type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenam
es , class BoostGenericDetailProvidedName = typename boost_generic_detail_providediterator < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passiterator : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultiterator < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_vali
d_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ForwardIterator < iterator > >::type > : ::boost::generic::detail::concept_is_valid < ForwardIterator < iterator > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedconst_iterator { typedef ::boost::generic::detail::dummy_type_< 7 > type; }; template< class BoostGenericDetailC
onceptMap > struct boost_generic_detail_providedconst_iterator < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: const_iterator >::type > { typedef typename BoostGenericDetailConceptMap:: const_iterator type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultconst_iterator { typedef ::boost::generic::detail::dummy_type_< 7 > type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultconst_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename C::const_iterator >::type > { typede
f typename C::const_iterator type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedconst_iterator < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passconst_iterator : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultconst_iterator < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , clas
s reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ForwardIterator < const_iterator > >::type > : ::boost::generic::detail::concept_is_valid < ForwardIterator < const_iterator > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class B
oostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<reference, const_reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<reference, const_reference> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires
_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<reference, const value_type&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<reference, const
 value_type&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_7 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator
 , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<const_reference, const value_type&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<const_reference, const value_type&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_8 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_
iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_8 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<iterator, const_iterator> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<iterator, const_iterator> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_8 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > str
uct boost_generic_detail_impl_requires_are_valid_9 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_9 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<iterator>::value_type, value_type> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::value_type, value_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_9 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_8 < BoostG
enericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_9 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_10 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_10 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<const_iterator>::value_type, value_type> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typen
ame ForwardIterator<const_iterator>::value_type, value_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_10 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_10 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_11 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_11 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type ,
 reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<iterator>::reference, reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::reference, reference> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_11 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_11 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_12 : ::std::integral_constant< bool, false > {}; template< typename C , class val
ue_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_12 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_12 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_11 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_det
ail_impl_requires_are_valid_12 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_13 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_13 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type> >::type > : ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::difference_type, typen
ame ForwardIterator<const_iterator>::difference_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_13 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_12 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_13 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_14 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_14 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , refer
ence , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < IntegralType<size_type> >::type > : ::boost::generic::detail::concept_is_valid < IntegralType<size_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_14 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_13 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_14 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_15 : ::std::integral_constant< bool, false > {}; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const
_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_15 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_15 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_14 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_15 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class
 BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passvalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < void****** > >::type value_type ; typedef typename boost_generic_detail_first_passreference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , void****** > >::type reference ; typedef typename boost_generic_detail_first_passconst_reference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , void****** > >::type const_reference ; typedef typename boost_generic_detail_first_passsize_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , void****** > >::type size_type ; typedef typename boost_generic_detail_first_passit
erator < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , void****** > >::type iterator ; typedef typename boost_generic_detail_first_passconst_iterator < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , void****** > >::type const_iterator ; }; template< class, class, class > struct boost_generic_detail_deduce_0value_type { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0const_reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0size_type { typedef ::boost::generic::detail::no_deduction typ
e; }; template< class, class, class > struct boost_generic_detail_deduce_0iterator { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0const_iterator { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() .
empty ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . empty ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypena
mes > struct boost_generic_detail_impl_funs_deduce_1value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetai
lConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::bo
ost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_ded
uce_1reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, clas
s BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; templat
e< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1const_reference < boost_generic_detail_params
< C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > s
truct boost_generic_detail_impl_this_deduce_1const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class
BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1size_type < boost_generic_detail_params < C
> , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_gen
eric_detail_impl_this_deduce_1size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class Bo
ostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDeta
ilAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1iterator : ::boost::mpl::identi
ty < decltype( boost_generic_detail_impl_funs_deduce_1iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struc
t boost_generic_detail_deduce_1iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGe
nericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < bool > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_im
pl_funs_deduce_1const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_deta
il_deduce_1const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , ty
pename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . size ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . size ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator,
 class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer
( ::boost::generic::detail::type_ < size_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2value_type < BoostGenericDetailConceptMap , BoostGen
ericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator
, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < size_type
> ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ,
 ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames >
struct boost_generic_detail_impl_funs_deduce_2const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < size_type > ); }; template< class Boo
stGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::b
oost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherType
names > struct boost_generic_detail_impl_funs_deduce_2size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < size_type > ); }; template< class BoostGenericD
etailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::bo
ost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_
2iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < size_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class
BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< cla
ss BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2const_iterator < boost_generic_detail_params < C > , ::b
oost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < size_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct bo
ost_generic_detail_impl_this_deduce_2const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGeneric
DetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type ,
reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . begin ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . begin ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, clas
s BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); t
emplate< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetai
lTypenames >::value , boost_generic_detail_impl_this_deduce_3value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, cla
ss BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::g
eneric::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_t
his_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostG
enericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_refere
nce > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_
3const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class
 BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost
_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3size_type < BoostGenericDeta
ilConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDeta
ilAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::t
ype_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTy
penames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypen
ames > struct boost_generic_detail_impl_funs_deduce_3const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class
BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::bo
ost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_4 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_
return_type_impl_4 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . begin ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . begin ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_4 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4value_ty
pe; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boos
t::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4value_type : ::boost::mpl::if_c < boost
_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4reference; template< typename C , class Boos
tGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::ge
neric::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < Boo
stGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostG
enericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_g
eneric_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGen
ericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4size_type; template< typename C , class BoostGenericDetailAugvalue_type,
 class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type >
boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap ,
BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class Boo
stGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template
< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames
>::value , boost_generic_detail_impl_this_deduce_4iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGeneri
cDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::gener
ic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost
_generic_detail_impl_this_deduce_4const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_5 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class cons
t_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_5 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . end ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . end ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_5 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::t
ype {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsi
ze_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGen
ericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetail
Params, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetai
lAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypena
mes > struct boost_generic_detail_this_deduce_5reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct bo
ost_generic_detail_impl_funs_deduce_5const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGener
icDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boos
t_generic_detail_this_deduce_5const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypename
s > struct boost_generic_detail_impl_funs_deduce_5size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGene
ricDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_d
educe_5size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5ite
rator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boo
st::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5iterator : ::boost::mpl::if_c < boost_generic_detail
_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5const_iterator; template< typename C , class BoostGenericDetailAugv
alue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail
::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_5const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15
 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_6 { typedef ::boost::gen
eric::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_6 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . end ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . end ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_6 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_6 < BoostGenericDetailPar
ams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference
reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGen
ericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6value_type < BoostGenericDetai
lConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailA
ugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::ty
pe {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGe
nericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference;
typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; temp
late< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6const_reference < BoostGenericDetailConceptMap , BoostGenericDe
tailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_refe
rence; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class Boost
GenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {};
 template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type siz
e_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPar
ams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGene
ricDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator
iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGeneri
cDetailTypenames > struct boost_generic_detail_this_deduce_6const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_6const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class
BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_7 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_7 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . cbegin ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . cbegin ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_7 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericD
etailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugcon
st_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer (
 ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6value_type< BoostGenericD
etailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTy
penames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typenam
e boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, Bo
ostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGener
icDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_gen
eric_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6const_reference< BoostGenericDetailConceptMap , BoostGenericDet
ailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef Boo
stGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_retur
n_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >:
:type , boost_generic_detail_this_deduce_7size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef
BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGeneri
cDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7iterator < Boos
tGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; type
def BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGe
nericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7const_iterato
r < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_8 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_8 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . cend ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . cend ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGeneri
cDetailTypenames > struct boost_generic_detail_return_type_8 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDet
ailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8value_type : ::boost::mpl::identity < decltype( b
oost_generic_detail_impl_funs_deduce_8value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_ge
neric_detail_deduce_8value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_7value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAug
const_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_8ref
erence< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_8reference : ::boost::ge
neric::detail::deduction_result < typename boost_generic_detail_deduce_7reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetail
Augsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_8const_reference< Boo
stGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_8const_reference : ::bo
ost::generic::detail::deduction_result < typename boost_generic_detail_deduce_7const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGeneri
cDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_8size_type< BoostGenericDetailPa
rams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_8size_type : ::boost::generic::detail::deduction_res
ult < typename boost_generic_detail_deduce_7size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterato
r, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_8iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_d
etail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_8iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_7iterator< Bo
ostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_8const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_8const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostG
enericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_8const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_8const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::
boost::generic::detail::type_ < typename boost_generic_detail_return_type_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_8const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_8const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_8const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_7const_iterator<
BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_8const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_9 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_9 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . front ( ) ) ) >::type > { typedef decltype
( ::std::declval< C >() . front ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_9 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_9 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs
_deduce_9value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetail
Params, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_9value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_9value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::
type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_9value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_9reference < boost_generic_detail_
params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > s
truct boost_generic_detail_impl_this_deduce_9reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_9reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConcep
tMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_9reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_9const_reference < boost_generic_detail_params < C > , ::boost::generic::detail:
:type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_i
mpl_this_deduce_9const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_9const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap
 , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_9const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_9size_type < boost_generic_detail_params < C > , ::boost::generic::detai
l::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_d
educe_9size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_9size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams,
 class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_9size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_9iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostG
enericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_9iterator : ::boost::mpl::identity < decltype( boo
st_generic_detail_impl_funs_deduce_9iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_de
tail_deduce_9iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_9const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_9const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugcons
t_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_9const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduc
e_9const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_9 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_9const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_9const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_9co
nst_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_8const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_9const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_10 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class value_type , class reference , class const_reference , class size_type , class iterator , class const_iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_10 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , BoostGenericDetailOtherTypenames... > , typename ::bo
ost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . front ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . front ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_10 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_10 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10value_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class
 BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_10value_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::b
oost::generic::detail::type_ < const_reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10value_type < BoostGenericDetailConceptMap , Bo
ostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst
_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_10reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ <
 const_reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGener
icDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10const_reference; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGeneri
cDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_10const_reference < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_reference > static ::boost::generic::detail::type_< const_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_refere
nce > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10const_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10const_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10const_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams,
 BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10const_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9const_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10size_type; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterato
r, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_10size_type < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class size_type > static ::boost::generic::detail::type_< size_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_r
eference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10size_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10size_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10size_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetail
Typenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10size_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9size_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTyp
enames > struct boost_generic_detail_impl_funs_deduce_10iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_reference > ); }; template< class BoostGen
ericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_
< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_10const_iterator; template< typename C , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugreference, class BoostGenericDetailAugconst_reference, class BoostGenericDetailAugsize_type, class BoostGenericDetailAugiterator, class BoostGenericDetailAugconst_iterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_
funs_deduce_10const_iterator < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugreference, BoostGenericDetailAugconst_reference, BoostGenericDetailAugsize_type, BoostGenericDetailAugiterator, BoostGenericDetailAugconst_iterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugconst_reference const_reference; typedef BoostGenericDetailAugsize_type size_type; typedef BoostGenericDetailAugiterator iterator; typedef BoostGenericDetailAugconst_iterator const_iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class const_iterator > static ::boost::generic::detail::type_< const_iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < const_reference > ); }; template< class BoostGenericDetailConceptMap , c
lass BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_10const_iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_10const_iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_10 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_10const_iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_15 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_10const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_
< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_10const_iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_9const_iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_10const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducevalue_type : boost_generic_detail_deduce_10value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducereference : boost
_generic_detail_deduce_10reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceconst_reference : boost_generic_detail_deduce_10const_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducesize_type : boost_generic_detail_deduce_10size_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceiterator : boost_generic_detail_deduce_10iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; tem
plate< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceconst_iterator : boost_generic_detail_deduce_10const_iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_
concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberContainer; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: value_type >::value , boost_generic_detail_deducevalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: value_type, typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_g
eneric_detail_typename_deducers:: value_type > >::type value_type; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: reference >::value , boost_generic_detail_deducereference < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type, typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: reference > >::type reference; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: const_reference >::value , boost_generic_detail_deduceconst_referen
ce < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference, typename boost_generic_detail_typename_deducers:: const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: const_reference > >::type const_reference; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: size_type >::value , boost_generic_detail_deducesize_type < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference, typename boost_generic_detail_typename_deducers:: size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typ
ename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: size_type > >::type size_type; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: iterator >::value , boost_generic_detail_deduceiterator < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type, typename boost_generic_detail_typename_deducers:: iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: iterator > >::type iterator; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: const_iterator >::value , boost_generic_detail_deduceconst_iterator < BoostGenericDetailConceptMap , boost_generic_detail_par
ams < C > , ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator, typename boost_generic_detail_typename_deducers:: const_iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: const_iterator > >::type const_iterator; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: value_type, typename boost_generic_detail_completed_concept_map_:: reference, typename boost_generic_detail_completed_concept_map_:: const_reference, typename boost_generic_detail_completed_concept_map_:: size_type, typename boost_generic_detail_completed_concept_map_:: iterator, typename boost_generic_detail_completed_concept_map_:: const_iterator, void
> boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_15< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< value_type > , ::boost::generic::detail::is_not_deduction_error< reference > , ::boost::generic::detail::is_not_deduction_error< const_reference > , ::boost::generic::detail::is_not_deduction_error< size_type > , ::boost::generic::detail::is_not_deduction_error< iterator > , ::boost::generic::detail::is_not_deduction_error< const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_
is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , bool > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , size_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boo
st_generic_detail_typenames >::type , iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detai
l_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typen
ames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_9 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_9 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_10 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_10
< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , const_reference > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_gen
eric_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberContainer MemberContainerBoostGenericDetailImpl; template< typename C > class MemberContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boos
t_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: value_type value_type; typedef typename boost_generic_detail_completed_concept_map:: reference reference; typedef typename boost_generic_detail_completed_concept_map:: const_reference const_reference; typedef typename boost_generic_detail_completed_concept_map:: size_type size_type; typede
f typename boost_generic_detail_completed_concept_map:: iterator iterator; typedef typename boost_generic_detail_completed_concept_map:: const_iterator const_iterator; private: typedef ::boost::generic::detail::type_list < value_type , reference , const_reference , size_type , iterator , const_iterator , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: value_type , ::boost::generic::detail::no_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: value_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename MemberContainer :: value_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename MemberContainer :: value_ty
pe , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ObjectType < typename MemberContainer :: value_type > > >::value , "typename '" "value_type" "' does not model '" "ObjectType" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: reference , ::boost::generic::detail::no_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: const_reference , ::boost::generic::detail::no_deduction >::value , "typename '" "const_reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename M
emberContainer :: const_reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "const_reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: size_type , ::boost::generic::detail::no_deduction >::value , "typename '" "size_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: size_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "size_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename MemberContainer :: size_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename MemberContainer :: size_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < UnsignedIntegralLike < typename MemberContainer :: size
_type > > >::value , "typename '" "size_type" "' does not model '" "UnsignedIntegralLike" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: iterator , ::boost::generic::detail::no_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: iterator , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename MemberContainer :: iterator , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename MemberContainer :: iterator , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ForwardIterator < typename MemberContainer :: iterator > > >::value , "typename '" "iterator" "' does not model '" "ForwardIterator" "'." ); static_assert ( ::
boost::generic::detail::is_not_same < typename MemberContainer :: const_iterator , ::boost::generic::detail::no_deduction >::value , "typename '" "const_iterator" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename MemberContainer :: const_iterator , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "const_iterator" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename MemberContainer :: const_iterator , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename MemberContainer :: const_iterator , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ForwardIterator < typename MemberContainer :: const_iterator > > >::value , "typename '" "const_iterator" "' does not model '" "ForwardIterator" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<reference, co
nst_reference> >::value , "requires " "Convertible<reference, const_reference>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<reference, const value_type&> >::value , "requires " "Convertible<reference, const value_type&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<const_reference, const value_type&> >::value , "requires " "Convertible<const_reference, const value_type&>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<iterator, const_iterator> >::value , "requires " "Convertible<iterator, const_iterator>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::value_type, value_type> >::value , "requires " "SameType<typename ForwardIterator<iterator>::value_type, value_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<const_iterator>::value_type, value_type> >::value , "requires " "SameType<typename ForwardItera
tor<const_iterator>::value_type, value_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::reference, reference> >::value , "requires " "Convertible<typename ForwardIterator<iterator>::reference, reference>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> >::value , "requires " "Convertible<typename ForwardIterator<const_iterator>::reference, const_reference>" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type> >::value , "requires " "SameType<typename ForwardIterator<iterator>::difference_type, typename ForwardIterator<const_iterator>::difference_type>" ); static_assert ( ::boost::generic::detail::concept_is_valid < IntegralType<size_type> >::value , "requires " "IntegralType<size_type>" ); static_assert ( ::boost:
:generic::detail::concept_is_valid < Convertible<typename ForwardIterator<iterator>::difference_type, size_type> >::value , "requires " "Convertible<typename ForwardIterator<iterator>::difference_type, size_type>" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "bool" " " "C" "::" "empty" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_conc
ept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , bool > >::value , "the return type of " "C" "::" "empty" "( " "" " )" " is not convertible to " "bool" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "size_type" " " "C" "::" "size" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_det
ail_params, boost_generic_detail_typenames >::type , size_type > >::value , "the return type of " "C" "::" "size" "( " "" " )" " is not convertible to " "size_type" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "C" "::" "begin" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_
generic_detail_typenames >::type , iterator > >::value , "the return type of " "C" "::" "begin" "( " "" " )" " is not convertible to " "iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "C" "::" "begin" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detai
l_typenames >::type , const_iterator > >::value , "the return type of " "C" "::" "begin" "( " "" " )" " is not convertible to " "const_iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "C" "::" "end" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenam
es >::type , iterator > >::value , "the return type of " "C" "::" "end" "( " "" " )" " is not convertible to " "iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "C" "::" "end" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , cons
t_iterator > >::value , "the return type of " "C" "::" "end" "( " "" " )" " is not convertible to " "const_iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "C" "::" "cbegin" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_
iterator > >::value , "the return type of " "C" "::" "cbegin" "( " "" " )" " is not convertible to " "const_iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_iterator" " " "C" "::" "cend" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_8 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_i
terator > >::value , "the return type of " "C" "::" "cend" "( " "" " )" " is not convertible to " "const_iterator" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_9 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "reference" " " "C" "::" "front" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_9 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_9 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , reference > >:
:value , "the return type of " "C" "::" "front" "( " "" " )" " is not convertible to " "reference" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_10 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "const_reference" " " "C" "::" "front" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_10 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_10 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , const_reference > >::
value , "the return type of " "C" "::" "front" "( " "" " )" " is not convertible to " "const_reference" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: MemberContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: MemberContainer < C > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < Boost
GenericDetailDummy , ::boost:: generic:: std_concept:: MemberContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,92 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberContainer)( (typename) C )
+, ( (ObjectType) value_type , typename C::value_type )
+, ( typename reference , typename C::reference )
+, ( typename const_reference , typename C::const_reference )
+, ( (UnsignedIntegralLike) size_type, typename C::size_type )
+
+// TODO make this auto deduction work from the return type of begin
+//, ( (ForwardIterator) iterator )
+//, ( (ForwardIterator) const_iterator )
+
+// NOTE: the standard doesn't have these defaults (they're deduced)
+, ( (ForwardIterator) iterator , typename C::iterator )
+, ( (ForwardIterator) const_iterator, typename C::const_iterator )
+
+, ( requires Convertible<reference, const_reference> )
+, ( requires Convertible<reference, const value_type&> )
+, ( requires Convertible<const_reference, const value_type&> )
+, ( requires Convertible<iterator, const_iterator> )
+, ( requires SameType<typename ForwardIterator<iterator>::value_type, value_type> )
+, ( requires SameType<typename ForwardIterator<const_iterator>::value_type, value_type> )
+, ( requires Convertible<typename ForwardIterator<iterator>::reference, reference> )
+, ( requires Convertible<typename ForwardIterator<const_iterator>::reference, const_reference> )
+, ( requires SameType<typename ForwardIterator<iterator>::difference_type,
+ typename ForwardIterator<const_iterator>::difference_type>
+ )
+, ( requires IntegralType<size_type> )
+, ( requires Convertible<typename ForwardIterator<iterator>::difference_type, size_type> )
+
+, ( (bool)(this(C) empty)() const, { return this->begin() == this->end(); } )
+, ( (size_type)(this(C) size)() const, { return ::std::distance(this->begin(), this->end()); } )
+
+, ( (iterator)(this(C) begin)() )
+, ( (const_iterator)(this(C) begin)() const )
+, ( (iterator)(this(C) end)() )
+, ( (const_iterator)(this(C) end)() const )
+, ( (const_iterator)(this(C) cbegin)() const, { return this->begin(); } )
+, ( (const_iterator)(this(C) cend)() const, { return this->end(); } )
+, ( (reference)(this(C) front)(), { return *this->begin(); } )
+, ( (const_reference)(this(C) front)() const, { return *this->begin(); } )
+
+, ( axiom MemberAccessFront(C c) {
+ if (c.begin() != c.end()) c.front() == *c.begin();
+ }
+ )
+
+, ( axiom MemberContainerSize(C c) {
+ (c.begin() == c.end()) == c.empty();
+ (c.begin() != c.end()) == (c.size() > 0);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+// TODO concept maps
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class MemberEmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_from_concept
 < MemberEmplacementContainer < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic:
:detail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . emplace ( ::std::declval< typename MemberInsertionContainer<C>::const_iterator >() , ::std::declval< Args&& >() ... ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . emplace ( ::std::declval< typename MemberInsertionContainer<C>::const_iterator >() , ::std::declval< Args&& >() ... ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_r
eturn_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < MemberInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail
_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberEmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_deta
il_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberEmplacementContainer < C , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberEmplacementCon
tainer < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberEmplacementContainer MemberEmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class MemberEmplacementContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberEmplacementContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberEmplacementContainer <
C , Args... > > ::boost_generic_concept_map_impl , C , Args... > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::
boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "emplace" "( " "typename MemberInsertionContainer<C>::const_iterator position , Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_im
pl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "emplace" "( " "typename MemberInsertionContainer<C>::const_iterator position , Args&&... args" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: MemberEmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberEmplacementContainer < C , Args... > > { static bool const is_specializ
ed = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberEmplacementContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: MemberEmplacementContainer < C , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberEmplacementContainer < C , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,50 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_MEMBER_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_MEMBER_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/member_insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberEmplacementContainer)( (typename) C, (typename,,,) Args ), ( public MemberInsertionContainer<C> )
+, ( (void)(this(C) emplace)( (typename MemberInsertionContainer<C>::const_iterator) position, (Args&&,,,) args ) )
+
+// TODO support this NOTE the standard has a redundant MemberInsertionContainer requirement on the second conditional axiom
+//, ( requires ( Constructible<typename MemberInsertionContainer<C>::value_type, Args...> )
+// axiom MemberEmplacement(C c, typename MemberInsertionContainer<C>::const_iterator position, Args... args) {
+// typename MemberInsertionContainer<C>::value_type(args...) == *c.emplace(position, args...);
+// }
+// )
+//, ( requires ( MemberInsertionContainer<C>, Constructible<typename MemberInsertionContainer<C>::value_type, Args...> )
+// axiom MemberEmplacementPushEquivalence(C c, typename MemberInsertionContainer<C>::const_iterator position, Args... args) {
+// *c.emplace(position, args...) == *c.insert(position, typename MemberInsertionContainer<C>::value_type(args...));
+// }
+// )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONTAINER_CONTAINER_CONCEPTS_MEMBER_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename... Args > class MemberFrontEmplacementContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberFrontEmplacementContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C , typename... Args > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename... Args > struct boost_generic_detail_params_fr
om_concept < MemberFrontEmplacementContainer < C , Args... > > { typedef boost_generic_detail_params < C , Args... > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::de
tail::dummy_type type; }; template< typename C , typename... Args , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Args... > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . emplace_front ( ::std::declval< Args&& >() ... ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . emplace_front ( ::std::declval< Args&& >() ... ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type >
>::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Args... > > { private: typedef
 boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Args... > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberFrontEmplacementContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Args... > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map ,
boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename... Args > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberFrontEmplacementContainer < C , Args... > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args... > type; }; template< typename C , typename... Args , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberFrontEmplacementContainer < C , Args... > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Args..
. >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontEmplacementContainer MemberFrontEmplacementContainerBoostGenericDetailImpl; template< typename C , typename... Args > class MemberFrontEmplacementContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontEmplacementContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberFrontEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > { typedef boost_generic_concept_impl_detail:: boost_ge
neric_detail_concept_implMemberFrontEmplacementContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberFrontEmplacementContainer < C , Args... > > ::boost_generic_concept_map_impl , C , Args... > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Args... > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failur
e >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "emplace_front" "( " "Args&&... args" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost:
:generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "emplace_front" "( " "Args&&... args" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename... Args > struct is_concept < ::boost:: generic:: std_concept:: MemberFrontEmplacementContainer < C , Args... > > : mpl::true_ {}; template< typename C , typename... Args > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberFrontEmplacementContainer < C , Args... > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontEmplacementContainer type; }; } } } namespace boost_generi
c_concept_map_detail { template< typename C , typename... Args > struct concept_map_ < ::boost:: generic:: std_concept:: MemberFrontEmplacementContainer < C , Args... > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberFrontEmplacementContainer < C , Args... > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_emplacement_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,52 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_EMPLACEMENT_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_EMPLACEMENT_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+#include <boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_front_emplacement_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberFrontEmplacementContainer)( (typename) C, (typename,,,) Args ), ( public MemberContainer<C> )
+, ( (void)(this(C) emplace_front)( (Args&&,,,) args ) )
+
+// TODO support this
+//, ( requires ( Constructible<typename MemberContainer<C>::value_type, Args...> )
+// axiom MemberFrontEmplacement(C c, Args... args) {
+// value_type(args...) == (c.emplace_front(args...), c.front());
+// }
+// )
+//
+//, ( requires ( MemberFrontInsertionContainer<C>, Constructible<value_type, Args...> )
+// axiom MemberFrontEmplacementPushEquivalence(C c, Args... args) {
+// (c.emplace_front(args...), c.front()) == (c.push_front(value_type(args...)), c.front());
+// }
+// )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_EMPLACEMENT_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberFrontInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberFrontInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberFrontInsertionContainer < C > > { typedef
boost_generic_detail_params < C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_typ
e_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . push_front ( ::std::declval< C& >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . push_front ( ::std::declval< C& >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_gene
ric_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; ty
pedef boost_generic_detail_completed_concept_map MemberFrontInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void <
typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberFrontInsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberFrontInsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAn
dParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontInsertionContainer MemberFrontInsertionContainerBoostGenericDetailImpl; template< typename C > class MemberFrontInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberFrontInsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberFro
ntInsertionContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::
boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "push_front" "( " "C& , typename MemberContainer<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::v
alue , "the return type of " "C" "::" "push_front" "( " "C& , typename MemberContainer<C>::value_type&&" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: MemberFrontInsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberFrontInsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberFrontInsertionContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: MemberFrontInsertionContainer < C > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > s
truct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberFrontInsertionContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_front_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberFrontInsertionContainer)( (typename) C ), ( public MemberContainer<C> )
+, ( (void)(this(C) push_front)( (C&), (typename MemberContainer<C>::value_type&&) ) )
+
+, ( axiom MemberFrontInsertion(C c, typename MemberContainer<C>::value_type x) {
+ x == (c.push_front(x), c.front());
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_FRONT_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberInsertionContainer < C > > { typedef boost_generic_d
etail_params < C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boos
t_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . insert ( ::std::declval< typename MemberContainer<C>::const_iterator >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . insert ( ::std::declval< typename MemberContainer<C>::const_iterator >() , ::std::declval< typename MemberContainer<C>::value_type&& >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_ty
pe > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < MemberContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetail
ConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost
::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename MemberContainer<C>::iterator > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberInsertionContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberInsertionContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename :
:boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberInsertionContainer MemberInsertionContainerBoostGenericDetailImpl; template< typename C > class MemberInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberInsertionContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_gener
ic_concept_map_detail::concept_map_ < MemberInsertionContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference
 to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename MemberContainer<C>::iterator" " " "C" "::" "insert" "( " "typename MemberContainer<C>::const_iterator , typename MemberContainer<C>::value_type&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_
detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename MemberContainer<C>::iterator > >::value , "the return type of " "C" "::" "insert" "( " "typename MemberContainer<C>::const_iterator , typename MemberContainer<C>::value_type&&" " )" " is not convertible to " "typename MemberContainer<C>::iterator" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: MemberInsertionContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberInsertionContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberInsertionContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: Mem
berInsertionContainer < C > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberInsertionContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberInsertionContainer)( (typename) C ), ( public MemberContainer<C> )
+, ( (typename MemberContainer<C>::iterator)(this(C) insert)( (typename MemberContainer<C>::const_iterator), (typename MemberContainer<C>::value_type&&) ) )
+
+, ( axiom MemberInsertion(C c, typename MemberContainer<C>::const_iterator position, typename MemberContainer<C>::value_type v) {
+ v == *c.insert(position, v);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberQueueLikeContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberQueueLikeContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberQueueLikeContainer < C > > { typedef boost_generic_d
etail_params < C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail
_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . pop_front ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . pop_front ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { ty
pedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberQueueLikeContainer; public: private: template< class, class > friend struct boost_ge
neric_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_ty
penames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberQueueLikeContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberQueueLikeContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams ,
BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberQueueLikeContainer MemberQueueLikeContainerBoostGenericDetailImpl; template< typename C > class MemberQueueLikeContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberQueueLikeContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberQueueLikeContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberQueueLikeContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberQueueLikeContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C >
boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberBackInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_i
mpl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "pop_front" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "pop_front" "( " "" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: gener
ic:: std_concept:: MemberQueueLikeContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberQueueLikeContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberQueueLikeContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: MemberQueueLikeContainer < C > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberQueueLikeContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_queue_like_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_QUEUE_LIKE_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_QUEUE_LIKE_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_queue_like_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberQueueLikeContainer)( (typename) C ), ( public MemberBackInsertionContainer<C> )
+, ( (void)(this(C) pop_front)() )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_QUEUE_LIKE_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename Iter > class MemberRangeInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberRangeInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C , typename Iter > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename Iter > struct boost_generic_detail_params_from_concept <
MemberRangeInsertionContainer < C , Iter > > { typedef boost_generic_detail_params < C , Iter > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename Iter , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberInsertionContainer<C> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename C , typename Iter , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1
 < boost_generic_detail_params < C , Iter > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < InputIterator<Iter> >::type > : ::boost::generic::detail::concept_is_valid < InputIterator<Iter> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::d
etail::dummy_type type; }; template< typename C , typename Iter , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Iter > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . insert ( ::std::declval< typename MemberInsertionContainer<C>::const_iterator >() , ::std::declval< Iter >() , ::std::declval< Iter >() ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . insert ( ::std::declval< typename MemberInsertionContainer<C>::const_iterator >() , ::std::declval< Iter >() , ::std::declval< Iter >() ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >
::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > , typename ::boost::generic::detail::always_void < MemberInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename Iter > stru
ct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Iter > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberRangeInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Iter > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, b
oost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberRangeInsertionContainer < C , Iter > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Iter > type; }; template< typename C , typename Iter , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberRangeI
nsertionContainer < C , Iter > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Iter >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberRangeInsertionContainer MemberRangeInsertionContainerBoostGenericDetailImpl; template< typename C , typename Iter > class MemberRangeInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberRangeInsertionContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberRangeInse
rtionContainer < C , Iter > > ::boost_generic_concept_map_impl , C , Iter > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberRangeInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberRangeInsertionContainer < C , Iter > > ::boost_generic_concept_map_impl , C , Iter > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Iter > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concep
t_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < InputIterator<Iter> >::value , "requires " "InputIterator<Iter>" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "insert" "( " "typename MemberInsertionContainer<C>::const_iterator position , Iter f
irst , Iter last" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "insert" "( " "typename MemberInsertionContainer<C>::const_iterator position , Iter first , Iter last" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename Iter > struct is_concept < ::boost:: generic:: std_concept:: MemberRangeInsertionContainer < C , Iter > > : mpl::true_ {}; template< typename C , typenam
e Iter > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberRangeInsertionContainer < C , Iter > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberRangeInsertionContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C , typename Iter > struct concept_map_ < ::boost:: generic:: std_concept:: MemberRangeInsertionContainer < C , Iter > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberRangeInsertionContainer < C , Iter > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_range_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_RANGE_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_RANGE_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_insertion_container.hpp>
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_range_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberRangeInsertionContainer)( (typename) C, (typename) Iter ), ( public MemberInsertionContainer<C> )
+, ( requires InputIterator<Iter> )
+, ( (void)(this(C) insert)( (typename MemberInsertionContainer<C>::const_iterator) position, (Iter) first, (Iter) last) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_RANGE_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class MemberStackLikeContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberStackLikeContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < MemberStackLikeContainer < C > > { typedef boost_generic_d
etail_params < C > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail
_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . back ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . back ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type typ
e; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . back ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . back ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void
> struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< C >() . pop_back ( ) ) ) >::type > { typedef decltype ( ::std::declval< C >() . pop_back ( ) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template<
 class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < MemberBackInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , MemberBackInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetail
ConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberStackLikeContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost
::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename MemberBackInsertionContainer<C>::reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename MemberBackInsertionContainer<C>::const_reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_ta
rget_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberStackLikeContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberStackLikeContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConc
eptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberStackLikeContainer MemberStackLikeContainerBoostGenericDetailImpl; template< typename C > class MemberStackLikeContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberStackLikeContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberStackLikeContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberStackLikeContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberStackLikeContainer < C > > :
:boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < MemberBackInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::d
etail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename MemberBackInsertionContainer<C>::reference" " " "C" "::" "back" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename MemberBackInsertionConta
iner<C>::reference > >::value , "the return type of " "C" "::" "back" "( " "" " )" " is not convertible to " "typename MemberBackInsertionContainer<C>::reference" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename MemberBackInsertionContainer<C>::const_reference" " " "C" "::" "back" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_con
cept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename MemberBackInsertionContainer<C>::const_reference > >::value , "the return type of " "C" "::" "back" "( " "" " )" " is not convertible to " "typename MemberBackInsertionContainer<C>::const_reference" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "C" "::" "pop_back" "( " "" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::tem
plate boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "C" "::" "pop_back" "( " "" " )" " is not convertible to " "void" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: MemberStackLikeContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: MemberStackLikeContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberStackLikeContainer type; }; } } } namespace boost_generic_concept_map_detail { template< typename C > struct concept_map_ < ::boost:: generic:: std_concept:: MemberStackLikeContainer < C > > { static bool const is_auto_concept_definition = true, is_usable
 = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberStackLikeContainer < C > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/member_stack_like_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_STACK_LIKE_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_STACK_LIKE_CONTAINER_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp>
+#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/member_stack_like_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.member]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberStackLikeContainer)( (typename) C ), ( public MemberBackInsertionContainer<C> )
+, ( (typename MemberBackInsertionContainer<C>::reference)(this(C) back)() )
+, ( (typename MemberBackInsertionContainer<C>::const_reference)(this(C) back)() const )
+, ( (void)(this(C) pop_back)() )
+
+// TODO support this
+//, ( requires ( BidirectionalIterator<typename MemberBackInsertionContainer<C>::iterator> )
+// axiom MemberAccessBack(C c) {
+// if (c.begin() != c.end()) c.back() == *(--c.end());
+// }
+// )
+
+, ( axiom MemberBackInsertion(C c, typename MemberBackInsertionContainer<C>::value_type x) {
+ x == (c.push_back(x), c.back());
+ }
+ )
+
+, ( axiom MemberBackRemoval(C c, typename MemberBackInsertionContainer<C>::value_type x) {
+ c == (c.push_back(x), c.pop_back(), c);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_MEMBER_STACK_LIKE_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class QueueLikeContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implQueueLikeContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < QueueLikeContainer < C > > { typedef boost_generic_detail_params < C > type; }; t
emplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < BackInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , BackInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type pop_front (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_
detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( pop_front (::std::declval< C& >()) ) ) >::type > { typedef decltype ( pop_front (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost
_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , typename ::boost::generic::detail::always_void < BackInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , BackInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_ty
pename_deducers; typedef boost_generic_detail_completed_concept_map QueueLikeContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is
_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , QueueLikeContainer < C > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < QueueLikeContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::bo
ost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implQueueLikeContainer QueueLikeContainerBoostGenericDetailImpl; template< typename C > class QueueLikeContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implQueueLikeContainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < QueueLikeContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implQueueLikeContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < QueueLikeContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_co
mpleted_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < BackInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_as
sert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "pop_front" "( " "C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "pop_front" "( " "C&" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace gener
ic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: QueueLikeContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: QueueLikeContainer < C > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implQueueLikeContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/queue_like_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_QUEUE_LIKE_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_QUEUE_LIKE_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/back_insertion_container.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/queue_like_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (QueueLikeContainer)( (typename) C ), ( public BackInsertionContainer<C> )
+, ( (void)(pop_front)( (C&) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_QUEUE_LIKE_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C , typename Iter > class RangeInsertionContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRangeInsertionContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C , typename Iter > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C , typename Iter > struct boost_generic_detail_params_from_concept < RangeInsertionContainer
 < C , Iter > > { typedef boost_generic_detail_params < C , Iter > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , typename Iter , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < InsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , InsertionContainer<C> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename C , typename Iter , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < C , Iter
> , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < InputIterator<Iter> >::type > : ::boost::generic::detail::concept_is_valid < InputIterator<Iter> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type insert (); template< class BoostGe
nericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , typename Iter , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C , Iter > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( insert (::std::declval< C& >() , ::std::declval< typename InsertionContainer<C>::const_iterator >() , ::std::declval< Iter >() , ::std::declval< Iter >()) ) ) >::type > { typedef decltype ( insert (::std::declval< C& >() , ::std::declval< typename InsertionContainer<C>::const_iterator >() , ::std::declval< Iter >() , ::std::declval< Iter >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_t
ype_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > , typename ::boost::generic::detail::always_void < InsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , InsertionContainer<C> > { type
def ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C , Iter > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C , Iter > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map RangeInsertionContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C , Iter > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_p
arent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C , typename Iter > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , RangeInsertionContainer < C , Iter > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Iter > ty
pe; }; template< typename C , typename Iter , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < RangeInsertionContainer < C , Iter > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C , Iter >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRangeInsertionContainer RangeInsertionContainerBoostGenericDetailImpl; template< typename C , typename Iter > class RangeInsertionContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRangeInsertionContainer:: boost_generic_d
etail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RangeInsertionContainer < C , Iter > > ::boost_generic_concept_map_impl , C , Iter > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRangeInsertionContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RangeInsertionContainer < C , Iter > > ::boost_generic_concept_map_impl , C , Iter > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C , Iter > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < InsertionContainer<C> >() ) >::type::value , "This message should never be seen."
); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < InputIterator<Iter> >::value , "requires " "InputIterator<Iter>" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "void" " " "insert" "( "
 "C& , typename InsertionContainer<C>::const_iterator position , Iter first , Iter last" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "insert" "( " "C& , typename InsertionContainer<C>::const_iterator position , Iter first , Iter last" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C , typename Iter > struct is_concept < ::boost:: generic:: std_concept:: RangeInsertionContainer < C
 , Iter > > : mpl::true_ {}; template< typename C , typename Iter > struct concept_impl_of < ::boost:: generic:: std_concept:: RangeInsertionContainer < C , Iter > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRangeInsertionContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/range_insertion_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_RANGE_INSERTION_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_RANGE_INSERTION_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/insertion_container.hpp>
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/range_insertion_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (RangeInsertionContainer)( (typename) C, (typename) Iter ), ( public InsertionContainer<C> )
+, ( requires InputIterator<Iter> )
+, ( (void)(insert)( (C&), (typename InsertionContainer<C>::const_iterator) position, (Iter) first, (Iter) last) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_RANGE_INSERTION_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename C > class StackLikeContainer; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implStackLikeContainer { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename C > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename C > struct boost_generic_detail_params_from_concept < StackLikeContainer < C > > { typedef boost_generic_detail_params < C > type; }; t
emplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename C , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < C > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < BackInsertionContainer<C> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , BackInsertionContainer<C> > {}; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_first_pass { }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type back (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detai
l_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( back (::std::declval< C& >()) ) ) >::type > { typedef decltype ( back (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailBoostGenericDetail
T > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type back (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( back (::std::declval< const C& >()) ) ) >::type > { typedef decltype ( back (::std::declval< const C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < Boost
GenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type pop_back (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename C , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < C > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( pop_back (::std::declval<
C& >()) ) ) >::type > { typedef decltype ( pop_back (::std::declval< C& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_para
ms < C > , typename ::boost::generic::detail::always_void < BackInsertionContainer<C> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , BackInsertionContainer<C> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < C > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , C > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map StackLikeContainer; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < C > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost
_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename BackInsertionContainer<C>::reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_d
etail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename BackInsertionContainer<C>::const_reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , void > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename C > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , StackLikeContainer < C
> > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C > type; }; template< typename C , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < StackLikeContainer < C > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , C >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStackLikeContainer StackLikeContainerBoostGenericDetailImpl; template< typename C > class StackLikeContainer : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStackLikeC
ontainer:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StackLikeContainer < C > > ::boost_generic_concept_map_impl , C > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStackLikeContainer boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StackLikeContainer < C > > ::boost_generic_concept_map_impl , C > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < C > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < BackInsertionContainer<C> >() ) >::type::value , "This message should never be seen." ); }; typedef typena
me ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename BackInsertionContainer<C>::reference" " " "back" "( " "C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_gen
eric_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename BackInsertionContainer<C>::reference > >::value , "the return type of " "back" "( " "C&" " ) " "is not convertible to " "typename BackInsertionContainer<C>::reference" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename BackInsertionContainer<C>::const_reference" " " "back" "( " "const C&" " )" ); stat
ic_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename BackInsertionContainer<C>::const_reference > >::value , "the return type of " "back" "( " "const C&" " ) " "is not convertible to " "typename BackInsertionContainer<C>::const_reference" " " ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::val
ue , "requires " "void" " " "pop_back" "( " "C&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , void > >::value , "the return type of " "pop_back" "( " "C&" " ) " "is not convertible to " "void" " " ); }; } } } namespace boost { namespace generic { namespace detail { template< typename C > struct is_concept < ::boost:: generic:: std_concept:: StackLikeContainer < C > > : mpl::true_ {}; template< typename C > struct concept_impl_of < ::boost:: generic:: std_concept:: StackLikeContainer < C > > { static bo
ol const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStackLikeContainer type; }; } } }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/container_concepts/stack_like_container.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,58 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_STACK_LIKE_CONTAINER_HPP
+#define BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_STACK_LIKE_CONTAINER_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/container_concepts/back_insertion_container.hpp>
+#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/container_concepts/stack_like_container.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [container.concepts.free]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (StackLikeContainer)( (typename) C ), ( public BackInsertionContainer<C> )
+, ( (typename BackInsertionContainer<C>::reference)(back)( (C&) ) )
+, ( (typename BackInsertionContainer<C>::const_reference)(back)( (const C&) ) )
+
+, ( (void)(pop_back)( (C&) ) )
+
+// TODO support this syntax for requirement-dependent axioms
+//, ( requires ( BidirectionalIterator<typename BackInsertionContainer<C>::iterator> )
+// axiom AccessBack(C c) {
+// if (begin(c) != end(c)) back(c) == *(--end(c));
+// }
+// )
+
+, ( axiom BackInsertion(C c, value_type x) {
+ x == (push_back(c, x), back(c));
+ }
+ )
+
+, ( axiom BackRemoval(C c, value_type x) {
+ c == (push_back(c, x), pop_back(c), c);
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_CONTAINER_CONCEPTS_STACK_LIKE_CONTAINER_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS
+
+// [iterator.iterators]
+#include <boost/generic/std_concept/iterator_concepts/iterator.hpp>
+
+// [input.iterators]
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+
+// [output.iterators]
+#include <boost/generic/std_concept/iterator_concepts/output_iterator.hpp>
+
+// [forward.iterators]
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+
+// [bidirectional.iterators]
+#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+
+// [random.access.iterators]
+#include <boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp>
+
+// [shuffle.iterators]
+#include <boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp>
+
+// [iterator.concepts.range]
+#include <boost/generic/std_concept/iterator_concepts/range.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 27 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class BidirectionalIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implBidirectionalIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < BidirectionalIterator < X > > { typedef boost_generic_detail_params < X > t
ype; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename X , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ForwardIterator<X> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ForwardIterator<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passpostdecrement_result { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passpostdecrement_result < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: postdecrement_result >::type >
 { typedef typename BoostGenericDetailConceptMap:: postdecrement_result type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveConstructible < postdecrement_result > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible < postdecrement_result > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap ,
BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasDereference<postdecrement_result> >::type > : ::boost::generic::detail::concept_is_valid < HasDereference<postdecrement_result> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ <
 boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible < typename HasDereference<postdecrement_result>::result_type , const typename ForwardIterator<X>::value_type& > >::type > : ::boost::generic::detail::concept_is_valid < Convertible < typename HasDereference<postdecrement_result>::resul
t_type , const typename ForwardIterator<X>::value_type& > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void
 < Convertible<postdecrement_result, const X&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<postdecrement_result, const X&> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passpostdecrement_result < BoostGenericDetailConceptMap >::type postdecrement_result ; }; template< class, class, class > struct boost_generic_detail_deduce_0postdecrement_result { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGe
nericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( -- ::std::declval< X& >() ) ) >::type > { typedef decltype ( -- ::std::declval< X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenam
es > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1postdecrement_result; template< typename X , class BoostGenericDetailAugpostdecrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1postdecrement_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugpostdecrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugpostdecrement_result postdecrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postdecrement_result > static ::boost::generic::detail::type_< postdecrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X& > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams
, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1postdecrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1postdecrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1postdecrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1postdecrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::
generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1postdecrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0postdecrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1postdecrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class postdecrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < postdecrement_r
esult , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< X& >() -- ) ) >::type > { typedef decltype ( ::std::declval< X& >() -- ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2postdecrement_result; template< typename X , class BoostGenericDetailAugpostdecrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2postdecreme
nt_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugpostdecrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugpostdecrement_result postdecrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postdecrement_result > static ::boost::generic::detail::type_< postdecrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < postdecrement_result > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2postdecrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2postdecrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGe
nericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2postdecrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2postdecrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2postdecrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1postdecrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, Boost
GenericDetailTypenames >::type , boost_generic_detail_this_deduce_2postdecrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducepostdecrement_result : boost_generic_detail_deduce_2postdecrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < ForwardIterator<X> >::type
> : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ForwardIterator<X> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map BidirectionalIterator; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: postdecrement_result >::value , boost_generic_detail_deducepostdecrement_result < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: postdecrement_result, void*****
***** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: postdecrement_result > >::type postdecrement_result; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: postdecrement_result, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_4< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< postdecrement_result > , ::boost::generic::detail::is_not_dummy_type < typename boost_generi
c_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X& > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , postdecrement_result > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_complete
d_concept_map_from_concept < BoostGenericDetailConceptMap , BidirectionalIterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < BidirectionalIterator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBidirectionalIterator BidirectionalIteratorBoostGenericDetailImpl; template< typename X > class Bidire
ctionalIterator : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBidirectionalIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < BidirectionalIterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBidirectionalIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < BidirectionalIterator < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate
 < ForwardIterator<X> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: postdecrement_result postdecrement_result; private: typedef ::boost::generic::detail::type_list < postdecrement_result , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename BidirectionalIterator :: postdecrement_result , ::boost::generic::detail::no_deduction >::value , "typename '" "postdecrement_result" "' was not explicitly satisfied a
nd cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename BidirectionalIterator :: postdecrement_result , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "postdecrement_result" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename BidirectionalIterator :: postdecrement_result , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename BidirectionalIterator :: postdecrement_result , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < MoveConstructible < typename BidirectionalIterator :: postdecrement_result > > >::value , "typename '" "postdecrement_result" "' does not model '" "MoveConstructible" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < HasDereference<postdecrement_result> >::value , "requires " "HasDereference<postdecrement_result>" ); static_assert ( ::boost::generic::detail::concept_is_va
lid < Convertible < typename HasDereference<postdecrement_result>::result_type , const typename ForwardIterator<X>::value_type& > >::value , "requires " "Convertible < typename HasDereference<postdecrement_result>::result_type , const typename ForwardIterator<X>::value_type& >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<postdecrement_result, const X&> >::value , "requires " "Convertible<postdecrement_result, const X&>" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X&" " operator " "--" "( " "X&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail
_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X& > >::value , "the return type of " "operator " "--" "( " "X&" " )" " is not convertible to " "X&" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "postdecrement_result" " operator " "--" "( " "X& , int" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boo
st_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , postdecrement_result > >::value , "the return type of " "operator " "--" "( " "X& , int" " )" " is not convertible to " "postdecrement_result" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_concept < ::boost:: generic:: std_concept:: BidirectionalIterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: BidirectionalIterator < X > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implBidirectionalIterator type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::BidirectionalIterator < T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T& reference; typedef T* pointer; typedef T* postincrement_result; typedef T* postdecrement_result; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::BidirectionalIterator < T* > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,60 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_BIDIRECTIONAL_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_BIDIRECTIONAL_ITERATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/bidirectional_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [bidirectional.iterators]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (BidirectionalIterator)( (typename) X ), ( public ForwardIterator<X> )
+, ( (MoveConstructible) postdecrement_result )
+, ( requires HasDereference<postdecrement_result> )
+, ( requires Convertible
+ < typename HasDereference<postdecrement_result>::result_type
+ , const typename ForwardIterator<X>::value_type&
+ >
+ )
+, ( requires Convertible<postdecrement_result, const X&> )
+, ( (X&)(operator predecrement)( (X&) ) )
+, ( (postdecrement_result)(operator postdecrement)( (X&), (int) ) )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::BidirectionalIterator )( T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef T& reference )
+, ( typedef T* pointer )
+, ( typedef T* postincrement_result )
+, ( typedef T* postdecrement_result )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_BIDIRECTIONAL_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 25 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class ForwardIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implForwardIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < ForwardIterator < X > > { typedef boost_generic_detail_params < X > type; }; template<
class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename X , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < InputIterator<X>, Regular<X> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , InputIterator<X>, Regular<X> > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::
always_void < Convertible< typename InputIterator<X>::postincrement_result , const X& > >::type > : ::boost::generic::detail::concept_is_valid < Convertible< typename InputIterator<X>::postincrement_result , const X& > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_
succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < InputIterator<X>, Regular<X> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , InputIterator<X>, Regular<X> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ForwardIterator; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_
map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ForwardIterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ForwardIter
ator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implForwardIterator ForwardIteratorBoostGenericDetailImpl; template< typename X > class ForwardIterator : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implForwardIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ForwardIterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost
_generic_detail_concept_implForwardIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ForwardIterator < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < InputIterator<X>, Regular<X> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; s
tatic_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < Convertible< typename InputIterator<X>::postincrement_result , const X& > >::value , "requires " "Convertible< typename InputIterator<X>::postincrement_result , const X& >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_concept < ::boost:: generic:: std_concept:: ForwardIterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: ForwardIterator < X > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_det
ail_concept_implForwardIterator type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::ForwardIterator < T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T& reference; typedef T* pointer; typedef T* postincrement_result; typedef T* postdecrement_result; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::ForwardIterator < T* > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/forward_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_FORWARD_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_FORWARD_ITERATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/regular.hpp>
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/forward_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [forward.iterators]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ForwardIterator)( (typename) X ), ( public (InputIterator<X>) (Regular<X>) )
+, ( requires Convertible< typename InputIterator<X>::postincrement_result
+ , const X&
+ >
+ )
+, ( axiom MultiPass(X a, X b) {
+ if (a == b) *a == *b;
+ if (a == b) ++a == ++b;
+ }
+ )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::ForwardIterator )( T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef T& reference )
+, ( typedef T* pointer )
+, ( typedef T* postincrement_result )
+, ( typedef T* postdecrement_result )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_FORWARD_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 32 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class InputIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implInputIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < InputIterator < X > > { typedef boost_generic_detail_params < X > type; }; template< class,
 class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename X , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Iterator<X>, EqualityComparable<X> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Iterator<X>, EqualityComparable<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedvalue_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: value_type >::type > { typedef typename BoostG
enericDetailConceptMap:: value_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultvalue_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultvalue_type < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename X::value_type >::type > { typedef typename X::value_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedvalue_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passvalue_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type <
 BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultvalue_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ObjectType < value_type > >::type > : ::boost::generic::detail::concept_is_valid < ObjectType < value_type > > {}; template< class BoostGenericDetailConceptM
ap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedpointer { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedpointer < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: pointer >::type > { typedef typename BoostGenericDetailConceptMap:: pointer type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_d
etail_typename_defaultpointer { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< typename X , class value_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultpointer < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename X::pointer >::type > { typedef typename X::pointer type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedpointer < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passpointer : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::val
ue , boost_generic_detail_typename_defaultpointer < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveConstructible < pointer > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible < pointer > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_
 < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_provideddifference_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_provideddifference_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: difference_type >::type > { typedef typename BoostGenericDetailConceptMap:: difference_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultdifference_type { typedef ::boost::generic::detail::dummy_type_< 5 > type; }; template<
typename X , class value_type , class pointer , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultdifference_type < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename X::difference_type >::type > { typedef typename X::difference_type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_provideddifference_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passdifference_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_d
efaultdifference_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SignedIntegralLike < difference_type > >::type > : ::boost::generic::detail::concept_is_valid < SignedIntegralLike < difference_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_
are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < IntegralType< difference_type > >::type > : ::boost::generic::detail::concept_is_valid < IntegralType< difference_type > > {}; template< class BoostGenericDetailConc
eptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible< typename Iterator<X>::reference, const
 value_type &> >::type > : ::boost::generic::detail::concept_is_valid < Convertible< typename Iterator<X>::reference, const value_type &> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list <
 value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible< pointer, const value_type* > >::type > : ::boost::generic::detail::concept_is_valid < Convertible< pointer, const value_type* > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenam
es > struct boost_generic_detail_impl_requires_are_valid_7 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible < typename HasDereference < typename Iterator<X>::postincrement_result >::result_type , const value_type& > >::type > : ::boost::generic::detail::concept_is_valid < Convertible < typename HasDereference < typename Iterator<X>::postincrement_result >::result_type , const value_type& > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGen
ericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passvalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < void****** > >::type value_type ; typedef typename boost_generic_detail_first_passpointer < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , void****** > >::type pointer ; typedef typename boost_generic_detail_first_passdifference_type < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , void****** > >::type difference_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0value_type { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0pointer { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class >
struct boost_generic_detail_deduce_0difference_type { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class value_type , class pointer , class difference_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer , difference_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::boost::generic::detail::operator_arrow_fun < const X& >() ) ) >::type > { typedef decltype ( ::boost::generic::detail::operator_arrow_fun < const X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_gen
eric_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1value_type; template< typename X , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugpointer, class BoostGenericDetailAugdifference_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1value_type < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugpointer, BoostGenericDetailAugdifference_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef B
oostGenericDetailAugpointer pointer; typedef BoostGenericDetailAugdifference_type difference_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class value_type > static ::boost::generic::detail::type_< value_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < pointer > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1value_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1value_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class Boost
GenericDetailTypenames > struct boost_generic_detail_this_deduce_1value_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1value_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0value_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDeta
ilTypenames > struct boost_generic_detail_impl_funs_deduce_1pointer; template< typename X , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugpointer, class BoostGenericDetailAugdifference_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1pointer < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugpointer, BoostGenericDetailAugdifference_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugpointer pointer; typedef BoostGenericDetailAugdifference_type difference_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class pointer > static ::boost::generic::detail::type_< pointer > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < pointer > ); }; template< class BoostGenericDetailConceptMap , class B
oostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1pointer : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1pointer< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1pointer : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1pointer < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type >
>::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1pointer : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0pointer< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1pointer < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1difference_type; template< typename X , class BoostGenericDetailAugvalue_type, class BoostGenericDetailAugpointer, class BoostGenericDetailAugdifference_type, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1difference_type < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugvalue_type, BoostGenericDetailAugpointe
r, BoostGenericDetailAugdifference_type, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugvalue_type value_type; typedef BoostGenericDetailAugpointer pointer; typedef BoostGenericDetailAugdifference_type difference_type; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class difference_type > static ::boost::generic::detail::type_< difference_type > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < pointer > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1difference_type : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1difference_type< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGene
ricDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1difference_type : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1difference_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1difference_type : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0difference_type< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail
_this_deduce_1difference_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducevalue_type : boost_generic_detail_deduce_1value_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducepointer : boost_generic_detail_deduce_1pointer < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducedifference_type : boost_generic_detail_deduce_1difference_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template<
 class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < Iterator<X>, EqualityComparable<X> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Iterator<X>, EqualityComparable<X> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGeneric
DetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map InputIterator; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: value_type >::value , boost_generic_detail_deducevalue_type < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: value_type, typename boost_generic_detail_typename_deducers:: pointer, typename boost_generic_detail_typename_deducers:: difference_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: value_type > >::type value_type; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: pointer >::value , boost_generic_detail_deducepointer < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::
generic::detail::type_list < value_type, typename boost_generic_detail_typename_deducers:: pointer, typename boost_generic_detail_typename_deducers:: difference_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: pointer > >::type pointer; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: difference_type >::value , boost_generic_detail_deducedifference_type < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < value_type , pointer, typename boost_generic_detail_typename_deducers:: difference_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: difference_type > >::type difference_type; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_gen
eric_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: value_type, typename boost_generic_detail_completed_concept_map_:: pointer, typename boost_generic_detail_completed_concept_map_:: difference_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_7< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< value_type > , ::boost::generic::detail::is_not_deduction_error< pointer > , ::boost::generic::detail::is_not_deduction_error< difference_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_d
etail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , pointer > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , InputIterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < InputIterator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap
 = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInputIterator InputIteratorBoostGenericDetailImpl; template< typename X > class InputIterator : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInputIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < InputIterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInputIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < InputIterator <
 X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Iterator<X>, EqualityComparable<X> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_ge
neric_detail_completed_concept_map:: value_type value_type; typedef typename boost_generic_detail_completed_concept_map:: pointer pointer; typedef typename boost_generic_detail_completed_concept_map:: difference_type difference_type; private: typedef ::boost::generic::detail::type_list < value_type , pointer , difference_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: value_type , ::boost::generic::detail::no_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: value_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "value_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename InputIterator :: value_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename InputIter
ator :: value_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < ObjectType < typename InputIterator :: value_type > > >::value , "typename '" "value_type" "' does not model '" "ObjectType" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: pointer , ::boost::generic::detail::no_deduction >::value , "typename '" "pointer" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: pointer , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "pointer" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename InputIterator :: pointer , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename InputIterator :: pointer , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < MoveConstructible < ty
pename InputIterator :: pointer > > >::value , "typename '" "pointer" "' does not model '" "MoveConstructible" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: difference_type , ::boost::generic::detail::no_deduction >::value , "typename '" "difference_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename InputIterator :: difference_type , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "difference_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename InputIterator :: difference_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename InputIterator :: difference_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < SignedIntegralLike < typename InputIterator :: difference_type > > >::value , "typename '" "difference_t
ype" "' does not model '" "SignedIntegralLike" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < IntegralType< difference_type > >::value , "requires " "IntegralType< difference_type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible< typename Iterator<X>::reference, const value_type &> >::value , "requires " "Convertible< typename Iterator<X>::reference, const value_type &>" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible< pointer, const value_type* > >::value , "requires " "Convertible< pointer, const value_type* >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible < typename HasDereference < typename Iterator<X>::postincrement_result >::result_type , const value_type& > >::value , "requires " "Convertible < typename HasDereference < typename Iterator<X>::postincrement_result >::result_type , const value_type& >" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_
concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "pointer" " operator " "->" "( " "const X&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , pointer > >::value , "the return type of " "operator " "->" "( " "const X&" " )" " is not convertible to " "pointer" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_co
ncept < ::boost:: generic:: std_concept:: InputIterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: InputIterator < X > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implInputIterator type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::InputIterator < T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T& reference; typedef T* pointer; typedef T* postincrement_result; typedef T* postdecrement_result; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::InputIterator < T* > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/input_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,68 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_INPUT_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_INPUT_ITERATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/iterator_concepts/iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/input_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [input.iterators]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (InputIterator)( (typename) X ), ( public (Iterator<X>) (EqualityComparable<X>) )
+, ( (ObjectType) value_type, typename X::value_type )
+, ( (MoveConstructible) pointer, typename X::pointer )
+, ( (SignedIntegralLike) difference_type, typename X::difference_type )
+, ( requires IntegralType< difference_type > )
+, ( requires Convertible< typename Iterator<X>::reference, const value_type &> )
+, ( requires Convertible< pointer, const value_type* > )
+, ( requires Convertible
+ < typename HasDereference
+ < typename Iterator<X>::postincrement_result >::result_type
+ , const value_type&
+ >
+ )
+, ( (pointer)(operator arrow)( (const X&) ) )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::InputIterator )( T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef T& reference )
+, ( typedef T* pointer )
+, ( typedef T* postincrement_result )
+, ( typedef T* postdecrement_result )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_INPUT_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 26 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class Iterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < Iterator < X > > { typedef boost_generic_detail_params < X > type; }; template< class, class, class,
class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename X , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Semiregular<X> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Semiregular<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedreference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: reference >::type > { typedef typename BoostGenericDetailConceptMap:: reference type; }; template< clas
s BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultreference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename X::reference >::type > { typedef typename X::reference type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedreference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passreference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires
_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultreference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveConstructible < reference > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible < reference > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericD
etailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passpostincrement_result { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passpostincrement_result < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: postincrement_result >::type > { typedef typename BoostGenericDetailConceptMap:: postincrement_result type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_val
id_2 : ::std::integral_constant< bool, false > {}; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveConstructible < postincrement_result > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible < postincrement_result > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGen
ericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasDereference< postincrement_result > >::type > : ::boost::generic::detail::concept_is_valid < HasDereference< postincrement_result > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl
_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passreference < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < void****** > >::type reference ; typedef typename boost_generic_detail_first_passpostincrement_result < BoostGenericDetailConceptMap >::type postincrement_result ; }; template< class, class, class > struct boost_generic_detail_deduce_0reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0postincrement_result { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }
; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( * ::std::declval< X& >() ) ) >::type > { typedef decltype ( * ::std::declval< X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGe
nericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1reference; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_gen
eric_detail_impl_this_deduce_1reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class Boo
stGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1postincrement_result; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1postincrement_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAu
greference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postincrement_result > static ::boost::generic::detail::type_< postincrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1postincrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1postincrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class
BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1postincrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1postincrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0postincrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericD
etailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( * ::std::declval< X&& >() ) ) >::type > { typedef decltype ( * ::std::declval< X&& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypen
ames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2reference; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic:
:detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_ded
uce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2postincrement_result; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_dedu
ce_2postincrement_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postincrement_result > static ::boost::generic::detail::type_< postincrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2postincrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2postincrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( :
:boost::generic::detail::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2postincrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2postincrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce
_1postincrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ++ ::std::declval< X& >() ) ) >::type > { typedef decltype ( ++ ::std::declval< X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostG
enericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3reference; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference
; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X& > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct bo
ost_generic_detail_this_deduce_3reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_deta
il_impl_funs_deduce_3postincrement_result; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3postincrement_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postincrement_result > static ::boost::generic::detail::type_< postincrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X& > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail
_impl_this_deduce_3postincrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3postincrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_3postincrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGe
nericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3postincrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2postincrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_4 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_4 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherType
names... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< X& >() ++ ) ) >::type > { typedef decltype ( ::std::declval< X& >() ++ ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_4 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4reference; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4reference < boost_g
eneric_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class reference > static ::boost::generic::detail::type_< reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < postincrement_result > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_retu
rn_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >:
:type , boost_generic_detail_this_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4postincrement_result; template< typename X , class BoostGenericDetailAugreference, class BoostGenericDetailAugpostincrement_result, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4postincrement_result < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugreference, BoostGenericDetailAugpostincrement_result, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugreference reference; typedef BoostGenericDetailAugpostincrement_result postincrement_result; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class postincrement_result > static ::boost::generic::detail::ty
pe_< postincrement_result > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < postincrement_result > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4postincrement_result : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4postincrement_result< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4postincrement_result : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >
::value , boost_generic_detail_impl_this_deduce_4postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4postincrement_result : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3postincrement_result< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducereference : boost_generic_detail_deduce_4reference < BoostGenericDetailConceptMap , BoostGenericDetailPar
ams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducepostincrement_result : boost_generic_detail_deduce_4postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < Semiregular<X> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Semiregular<X> > { typedef ::std::true_type boost_
generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Iterator; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: reference >::value , boost_generic_detail_deducereference < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: postincrement_result, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: reference > >::type reference; typedef
typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: postincrement_result >::value , boost_generic_detail_deducepostincrement_result < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < reference, typename boost_generic_detail_typename_deducers:: postincrement_result, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: postincrement_result > >::type postincrement_result; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: reference, typename boost_generic_detail_completed_concept_map_:: postincrement_result, void > boost_generic_detail_typenames; p
ublic: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_3< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< reference > , ::boost::generic::detail::is_not_deduction_error< postincrement_result > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_d
etail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X& > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_conv
ertible_or_target_is_void < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , postincrement_result > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Iterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Iterator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConcept
AndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIterator IteratorBoostGenericDetailImpl; template< typename X > class Iterator : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Iterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Iterator < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_conc
ept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Semiregular<X> >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: reference reference; typedef typename boost_generic_detail_completed_concept_map:: postincrement_result po
stincrement_result; private: typedef ::boost::generic::detail::type_list < reference , postincrement_result , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename Iterator :: reference , ::boost::generic::detail::no_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Iterator :: reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Iterator :: reference , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Iterator :: reference , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < MoveConstructible < typename Iterator :: reference > > >::value , "typename '" "reference" "' does not model '" "MoveConstructible
" "'." ); static_assert ( ::boost::generic::detail::is_not_same < typename Iterator :: postincrement_result , ::boost::generic::detail::no_deduction >::value , "typename '" "postincrement_result" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Iterator :: postincrement_result , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "postincrement_result" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Iterator :: postincrement_result , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Iterator :: postincrement_result , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < MoveConstructible < typename Iterator :: postincrement_result > > >::value , "typename '" "postincrement_result" "' does not model '" "MoveConstructible" "'." ); static_assert ( ::boost::generic::detail:
:concept_is_valid < HasDereference< postincrement_result > >::value , "requires " "HasDereference< postincrement_result >" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "reference" " operator " "*" "( " "X&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , referenc
e > >::value , "the return type of " "operator " "*" "( " "X&" " )" " is not convertible to " "reference" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "reference" " operator " "*" "( " "X&&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , reference > >::value , "
the return type of " "operator " "*" "( " "X&&" " )" " is not convertible to " "reference" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X&" " operator " "++" "( " "X&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X& > >::value , "the return type of " "operato
r " "++" "( " "X&" " )" " is not convertible to " "X&" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "postincrement_result" " operator " "++" "( " "X& , int" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , postincrement_result > >::value , "the return type of " "o
perator " "++" "( " "X& , int" " )" " is not convertible to " "postincrement_result" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_concept < ::boost:: generic:: std_concept:: Iterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: Iterator < X > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIterator type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::Iterator < T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T& reference; typedef T* pointer; typedef T* postincrement_result; typedef T* postdecrement_result; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::Iterator < T* > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,138 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_ITERATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/concepts/semiregular.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [iterator.iterators]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Iterator)( (typename) X )
+, ( public Semiregular<X> )
+, ( (MoveConstructible) reference, typename X::reference )
+, ( (MoveConstructible) postincrement_result )
+, ( requires HasDereference< postincrement_result > )
+, ( (reference)(operator dereference)( (X&) ) )
+, ( (reference)(operator dereference)( (X&&) ) )
+, ( (X&)(operator preincrement)( (X&) ) )
+, ( (postincrement_result)(operator postincrement)( (X&), (int) ) )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::Iterator )( T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef T& reference )
+, ( typedef T* pointer )
+, ( typedef T* postincrement_result )
+, ( typedef T* postdecrement_result )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+// These are included for the standard concept maps of Iterator refinements
+//#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+//#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+//#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+//#include <boost/generic/std_concept/iterator_concepts/output_iterator.hpp>
+//#include <boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp>
+//#include <boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+// ToDo: Move this to a separate header
+#include <boost/generic/config/std_lib.hpp>
+
+#if BOOST_GENERIC_STD_LIB_IS_KNOWN()
+
+#include <boost/generic/concept_map.hpp>
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+
+#include <boost/generic/detail/std_forward_decl.hpp>
+#include <cstddef>
+
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( array_iterator )
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( deque_iterator )
+//#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( vector_bool_iterator )
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( vector_iterator )
+
+// ToDo: Handle bitset types
+
+#if !BOOST_GENERIC_CONFIG_STD_LIB_ARRAY_ITERATOR_IS_POINTER()
+
+// array iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( array_iterator )
+, ( boost::generic::std_concept::Iterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( array_iterator ) )
+)
+
+#endif
+
+#if !BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_ARRAY_ITERATOR() \
+ && !BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_POINTER()
+
+// vector iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_iterator )
+, ( boost::generic::std_concept::Iterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( vector_iterator ) )
+)
+
+#endif
+
+// deque iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( deque_iterator )
+, ( boost::generic::std_concept::Iterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( deque_iterator ) )
+)
+
+// vector< bool > iterator
+//BOOST_GENERIC_CONCEPT_MAP
+//( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_bool_iterator )
+// BOOST_PP_COMMA_IF
+// ( BOOST_PP_COMPL
+// ( BOOST_GENERIC_DETAIL_IS_EMPTY
+// ( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_bool_iterator ) )
+// )
+// )
+// ( boost::generic::std_concept::Iterator )
+// ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( vector_bool_iterator ) )
+//)
+
+#else
+
+BOOST_GENERIC_ASSERT_STD_LIB_IS_NOT_SUPPORTED()
+
+#endif
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X , typename Value > class OutputIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implOutputIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename X , typename Value > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X , typename Value > struct boost_generic_detail_params_from_concept < OutputIterator < X , Value
> > { typedef boost_generic_detail_params < X , Value > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Iterator<X> >::type > : ::boost::generic::detail::concept_is_valid < Iterator<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap
, BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedreference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: reference >::type > { typedef typename BoostGenericDetailConceptMap:: reference type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultreference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename X , typename Value , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_type
name_defaultreference < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename Iterator<X>::reference >::type > { typedef typename Iterator<X>::reference type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedreference < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passreference : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultreference < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; temp
late< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedpostincrement_result { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedpostincrement_result < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: postincrement_result >::type > { typedef typename BoostGenericDetailConceptMap:: postincrement_result type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultpostincrement_result { typedef ::boost::generic::detail::dummy_type_< 4 > type; }; template< typename X , typename Value , class reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultpostincrement_result < boost_generic_detail_params < X , Value > , ::boost::generic::detai
l::type_list < reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename Iterator<X>::postincrement_result >::type > { typedef typename Iterator<X>::postincrement_result type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedpostincrement_result < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passpostincrement_result : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultpostincrement_result < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGeneric
DetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType< reference, typename Iterator<X>::reference > >::type > : ::boost::generic::detail::concept_is_valid < SameType< reference, typename Iterator<X>::reference > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, Boos
tGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < SameType< postincrement_result , typename Iterator<X>::postincrement_result > >::type > : ::boost::generic::detail::concept_is_valid < SameType< postincrement_result , typename Iterator<X>::postincrement_result > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams,
class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible< postincrement_result, const X& > >::type > : ::boost::generic::detail::c
oncept_is_valid < Convertible< postincrement_result, const X& > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTy
penames... > , typename ::boost::generic::detail::always_void < HasAssign< reference, Value > >::type > : ::boost::generic::detail::concept_is_valid < HasAssign< reference, Value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename X , typename Value , class reference , class postincrement_result , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_para
ms < X , Value > , ::boost::generic::detail::type_list < reference , postincrement_result , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasAssign < typename HasDereference<postincrement_result>::result_type , Value > >::type > : ::boost::generic::detail::concept_is_valid < HasAssign < typename HasDereference<postincrement_result>::result_type , Value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X , typename Value > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passreference < BoostGen
ericDetailConceptMap , boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < void****** > >::type reference ; typedef typename boost_generic_detail_first_passpostincrement_result < BoostGenericDetailConceptMap , boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference , void****** > >::type postincrement_result ; }; template< class, class, class > struct boost_generic_detail_deduce_0reference { typedef ::boost::generic::detail::no_deduction type; }; template< class, class, class > struct boost_generic_detail_deduce_0postincrement_result { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducereference : boost_generic_detail_deduce_0reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class BoostGenericDetailConceptMap , class BoostGenericD
etailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deducepostincrement_result : boost_generic_detail_deduce_0postincrement_result < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X , typename Value > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X , Value > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X , typename Value > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts <
 BoostGenericDetailConceptMap , boost_generic_detail_params < X , Value > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , X , Value > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map OutputIterator; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: reference >::value , boost_generic_detail_deducereference < BoostGenericDetailConceptMap , boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: reference, typename boost_generic_detail_typename_deducers:: postincrement_result, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: reference > >::type reference; typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: postincrement_result >::value , b
oost_generic_detail_deducepostincrement_result < BoostGenericDetailConceptMap , boost_generic_detail_params < X , Value > , ::boost::generic::detail::type_list < reference, typename boost_generic_detail_typename_deducers:: postincrement_result, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: postincrement_result > >::type postincrement_result; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X , Value > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: reference, typename boost_generic_detail_completed_concept_map_:: postincrement_result, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_gener
ic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_6< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< reference > , ::boost::generic::detail::is_not_deduction_error< postincrement_result > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X , typename Value > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , OutputIterator < X , Value > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X , Value > type; }; template< typename X , typename Value , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < OutputIterator < X , Value > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X , Value >::boost_generic_detail_
is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implOutputIterator OutputIteratorBoostGenericDetailImpl; template< typename X , typename Value > class OutputIterator : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implOutputIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < OutputIterator < X , Value > > ::boost_generic_concept_map_impl , X , Value > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implOutputIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_conc
ept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < OutputIterator < X , Value > > ::boost_generic_concept_map_impl , X , Value > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X , Value > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_con
cept_map:: reference reference; typedef typename boost_generic_detail_completed_concept_map:: postincrement_result postincrement_result; private: typedef ::boost::generic::detail::type_list < reference , postincrement_result , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < Iterator<X> >::value , "requires " "Iterator<X>" ); static_assert ( ::boost::generic::detail::is_not_same < typename OutputIterator :: reference , ::boost::generic::detail::no_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename OutputIterator :: reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::is_not_same < typename OutputIterator :: postincrement_result , ::boost::generic::detail::no_deduction >::value , "typename
'" "postincrement_result" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename OutputIterator :: postincrement_result , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "postincrement_result" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType< reference, typename Iterator<X>::reference > >::value , "requires " "SameType< reference, typename Iterator<X>::reference >" ); static_assert ( ::boost::generic::detail::concept_is_valid < SameType< postincrement_result , typename Iterator<X>::postincrement_result > >::value , "requires " "SameType< postincrement_result , typename Iterator<X>::postincrement_result >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible< postincrement_result, const X& > >::value , "requires " "Convertible< postincrement_result, const X& >" ); static_assert ( ::boost::generic::detail::
concept_is_valid < HasAssign< reference, Value > >::value , "requires " "HasAssign< reference, Value >" ); static_assert ( ::boost::generic::detail::concept_is_valid < HasAssign < typename HasDereference<postincrement_result>::result_type , Value > >::value , "requires " "HasAssign < typename HasDereference<postincrement_result>::result_type , Value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X , typename Value > struct is_concept < ::boost:: generic:: std_concept:: OutputIterator < X , Value > > : mpl::true_ {}; template< typename X , typename Value > struct concept_impl_of < ::boost:: generic:: std_concept:: OutputIterator < X , Value > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implOutputIterator type; }; } } } namespace boost_generic_concept_map_detail { template< typename X , typename Value > struct concept_map_ < ::b
oost:: generic:: std_concept:: OutputIterator < X , Value > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: OutputIterator < X , Value > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/output_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_OUTPUT_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_OUTPUT_ITERATOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/iterator_concepts/iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/output_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// TODO make sure that this is supposed to be nd auto concept
+
+// [output.iterators]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (OutputIterator)( (typename) X, (typename) Value )
+, ( requires Iterator<X> )
+, ( typename reference, typename Iterator<X>::reference )
+, ( typename postincrement_result, typename Iterator<X>::postincrement_result )
+, ( requires SameType< reference, typename Iterator<X>::reference > )
+, ( requires SameType< postincrement_result
+ , typename Iterator<X>::postincrement_result
+ >
+ )
+, ( requires Convertible< postincrement_result, const X& > )
+, ( requires HasAssign< reference, Value > )
+, ( requires HasAssign
+ < typename HasDereference<postincrement_result>::result_type
+ , Value
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_OUTPUT_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,5 @@
+#line 27 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class RandomAccessIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRandomAccessIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < RandomAccessIterator < X > > { typedef boost_generic_detail_params < X > type
; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename X , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < BidirectionalIterator<X>, LessThanComparable<X> >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , BidirectionalIterator<X>, LessThanComparable<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passsubscript_reference { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passsubscript_reference < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGen
ericDetailConceptMap:: subscript_reference >::type > { typedef typename BoostGenericDetailConceptMap:: subscript_reference type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveConstructible < subscript_reference > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible < subscript_reference > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_require
s_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Convertible<subscript_reference, const typename BidirectionalIterator<X>::value_type&> >::type > : ::boost::generic::detail::concept_is_valid < Convertible<subscript_reference, const typename BidirectionalIterator<X>::value_type&> > {}; template< class BoostGenericDetailConcept
Map , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passsubscript_reference < BoostGenericDetailConceptMap >::type subscript_reference ; }; template< class, class, class > struct boost_generic_detail_deduce_0subscript_reference { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class su
bscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< X& >() += ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) ) >::type > { typedef decltype ( ::std::declval< X& >() += ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::d
ummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X& > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_
impl_this_deduce_1subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGeneric
DetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::
detail::always_void < decltype ( ( ::std::declval< const X& >() + ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) ) >::type > { typedef decltype ( ::std::declval< const X& >() + ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_2subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetai
lOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typen
ame boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1subscript_reference< BoostGenericDetail
ConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_3 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< typename BidirectionalIterator<X>::difference_type >() + ::std::declval< const X& >() ) ) >::type > { typedef decltype ( ::std::declval< typename BidirectionalIterator<X>::difference_type >() + ::std::declval< const
X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_3 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_3subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_3subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDet
ailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_3subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_3subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames
> struct boost_generic_detail_this_deduce_3subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_3subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_3subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_2subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_3subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams
, class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_4 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_4 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< X& >() -= ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) ) >::type > { typedef decltype ( ::std::declval< X& >() -= ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_4 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , Boo
stGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_4subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_4subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_gene
ric_detail_fun_deducer ( ::boost::generic::detail::type_ < X& > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_4subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_4subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_4subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_4subscript_
reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_4subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_3subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_4subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_5 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames >
 struct boost_generic_detail_return_type_impl_5 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const X& >() - ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) ) >::type > { typedef decltype ( ::std::declval< const X& >() - ::std::declval< typename BidirectionalIterator<X>::difference_type >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_5 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericD
etailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_5subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_5subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < X > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_5subscript_reference : ::boost::mpl::
identity < decltype( boost_generic_detail_impl_funs_deduce_5subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_5subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_5subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, cla
ss BoostGenericDetailTypenames > struct boost_generic_detail_deduce_5subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_4subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_5subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_6 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_6 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< con
st X& >() - ::std::declval< const X& >() ) ) >::type > { typedef decltype ( ::std::declval< const X& >() - ::std::declval< const X& >() ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_6 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_6subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_6subscript_reference < boost_generic_detail_params < X > , ::boost::generic
::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename BidirectionalIterator<X>::difference_type > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_6subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_6subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_6 < BoostGenericDetailConceptMap , BoostGenericDetai
lParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_6subscript_reference : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_6subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_6subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_5subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generi
c_detail_this_deduce_6subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_7 { typedef ::boost::generic::detail::dummy_type type; }; template< typename X , class subscript_reference , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_7 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < subscript_reference , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( ::std::declval< const X& >() [::std::declval< typename BidirectionalIterator<X>::difference_type >()] ) ) >::type > { typedef decltype ( ::std::declval< const X& >() [::std::declval< typename BidirectionalIterator<X>::difference_type >()] ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetail
Params , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_7 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_7subscript_reference; template< typename X , class BoostGenericDetailAugsubscript_reference, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_7subscript_reference < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailAugsubscript_reference, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugsubscript_reference subscript_reference; static ::boost::generic::detail::type_< ::
boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class subscript_reference > static ::boost::generic::detail::type_< subscript_reference > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < subscript_reference > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_7subscript_reference : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_7subscript_reference< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_7subscript_reference : ::boo
st::mpl::if_c < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_7subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_7subscript_reference : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_6subscript_reference< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_7subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames
> struct boost_generic_detail_deducesubscript_reference : boost_generic_detail_deduce_7subscript_reference < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < BidirectionalIterator<X>, LessThanComparable<X> >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , BidirectionalIterator<X>, LessThanComparable<X> > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap ,
typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map RandomAccessIterator; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: subscript_reference >::value , boost_generic_detail_deducesubscript_reference < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: subscript_reference, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: subscript_reference > >::type subscript_reference; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_det
ail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: subscript_reference, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_2< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< subscript_reference > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1
 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X& > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X > , ::boost::generic::d
etail::is_not_dummy_type < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X& > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , X > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_param
s_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , typename BidirectionalIterator<X>::difference_type > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , subscript_reference > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailCo
nceptMap , RandomAccessIterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < RandomAccessIterator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRandomAccessIterator RandomAccessIteratorBoostGenericDetailImpl; template< typename X > class RandomAccessIterator : boost_generic_concept_impl_detail::
boost_generic_detail_concept_implRandomAccessIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RandomAccessIterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRandomAccessIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < RandomAccessIterator < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < BidirectionalIterator<X>, LessThanComparable<X> >() ) >
::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: subscript_reference subscript_reference; private: typedef ::boost::generic::detail::type_list < subscript_reference , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename RandomAccessIterator :: subscript_reference , ::boost::generic::detail::no_deduction >::value , "typename '" "subscript_reference" "' was not explicitly satisfied and cannot be deduced." ); static_as
sert ( ::boost::generic::detail::is_not_same < typename RandomAccessIterator :: subscript_reference , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "subscript_reference" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename RandomAccessIterator :: subscript_reference , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename RandomAccessIterator :: subscript_reference , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < MoveConstructible < typename RandomAccessIterator :: subscript_reference > > >::value , "typename '" "subscript_reference" "' does not model '" "MoveConstructible" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < Convertible<subscript_reference, const typename BidirectionalIterator<X>::value_type&> >::value , "requires " "Convertible<subscript_reference, const typename BidirectionalIterator<X>::value_type&>" );
static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X&" " operator " "+=" "( " "X& , typename BidirectionalIterator<X>::difference_type" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X& > >::value , "the return type of " "operator " "+=" "( " "X& , typename Bidirectiona
lIterator<X>::difference_type" " )" " is not convertible to " "X&" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X" " operator " "+" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X > >::va
lue , "the return type of " "operator " "+" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" " is not convertible to " "X" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X" " operator " "+" "( " "typename BidirectionalIterator<X>::difference_type n , const X& x" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_3 < boost_generic_detail_completed_concept_
map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X > >::value , "the return type of " "operator " "+" "( " "typename BidirectionalIterator<X>::difference_type n , const X& x" " )" " is not convertible to " "X" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X&" " operator " "-=" "( " "X& , typename BidirectionalIterator<X>::difference_type" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template
 boost_generic_detail_return_type_4 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X& > >::value , "the return type of " "operator " "-=" "( " "X& , typename BidirectionalIterator<X>::difference_type" " )" " is not convertible to " "X&" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "X" " operator " "-" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convert
ible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_5 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , X > >::value , "the return type of " "operator " "-" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" " is not convertible to " "X" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "typename BidirectionalIterator<X>::difference_type" " operator " "-" "( " "const X& , const X&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail
_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_6 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , typename BidirectionalIterator<X>::difference_type > >::value , "the return type of " "operator " "-" "( " "const X& , const X&" " )" " is not convertible to " "typename BidirectionalIterator<X>::difference_type" ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "subscript_reference" " operator " "operator_" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_
type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_7 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , subscript_reference > >::value , "the return type of " "operator " "operator_" "( " "const X& x , typename BidirectionalIterator<X>::difference_type n" " )" " is not convertible to " "subscript_reference" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_concept < ::boost:: generic:: std_concept:: RandomAccessIterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: RandomAccessIterator < X > > { static bool const is_specialize
d = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRandomAccessIterator type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::RandomAccessIterator < T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef T& reference; typedef T* pointer; typedef T* postincrement_result; typedef T* postdecrement_result; typedef T& subscript_reference; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::RandomAccessIterator < T* > >() ) instanti
ate_; }; }; }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T > struct concept_map_ < boost::generic::std_concept::RandomAccessIterator < const T* > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T value_type; typedef std::ptrdiff_t difference_type; typedef const T& reference; typedef const T* pointer; typedef const T* postincrement_result; }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::RandomAccessIterator < const T* > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,188 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANDOM_ACCESS_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANDOM_ACCESS_ITERATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/concepts/less_than_comparable.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/random_access_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [random.access.iterators]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (RandomAccessIterator)( (typename) X )
+, ( public (BidirectionalIterator<X>) (LessThanComparable<X>) )
+, ( (MoveConstructible) subscript_reference )
+, ( requires Convertible<subscript_reference, const typename BidirectionalIterator<X>::value_type&> )
+, ( (X&)(operator plus_assign)( (X&), (typename BidirectionalIterator<X>::difference_type ) ) )
+, ( (X)(operator plus)( (const X&) x, (typename BidirectionalIterator<X>::difference_type) n ), {
+ X tmp(x); tmp += n; return tmp;
+ }
+ )
+, ( (X)(operator plus)( (typename BidirectionalIterator<X>::difference_type) n, (const X&) x ), {
+ X tmp(x); tmp += n; return tmp;
+ }
+ )
+, ( (X&)(operator minus_assign)( (X&), (typename BidirectionalIterator<X>::difference_type) ) )
+, ( (X)(operator minus)( (const X&) x, (typename BidirectionalIterator<X>::difference_type) n ), {
+ X tmp(x); tmp -= n; return tmp;
+ }
+ )
+, ( (typename BidirectionalIterator<X>::difference_type)(operator minus)( (const X&), (const X&) ) )
+, ( (subscript_reference)(operator subscript)( (const X&) x
+ , (typename BidirectionalIterator<X>::difference_type) n
+ )
+ )
+)
+
+
+// [random.access.iterators]
+//BOOST_GENERIC_CONCEPT
+//( ( namespace boost, generic, std_concept )
+//, (RandomAccessIterator)( (typename) X )
+//, ( public BidirectionalIterator<X>, LessThanComparable<X> )
+//, ( using typename BidirectionalIterator<X>::value_type )
+//, ( using typename BidirectionalIterator<X>::difference_type )
+//, ( (MoveConstructible) subscript_reference )
+//, ( requires Convertible<subscript_reference, const value_type&> )
+//, ( (X&)(operator plus_assign)( (X&), (difference_type ) ) )
+//, ( (X)(operator plus)( (const X&) x, (difference_type) n ), {
+// X tmp(x); tmp += n; return tmp;
+// }
+// )
+//, ( (X)(operator plus)( (difference_type) n, (const X&) x ), {
+// X tmp(x); tmp += n; return tmp;
+// }
+// )
+//, ( (X&)(operator minus_assign)( (X&), (difference_type) ) )
+//, ( (X)(operator minus)( (const X&) x, (difference_type) n ), {
+// X tmp(x); tmp -= n; return tmp;
+// }
+// )
+//, ( (difference_type)(operator minus)( (const X&), (const X&) ) )
+//, ( (subscript_reference)(operator subscript)( (const X&) x
+// , (difference_type) n
+// )
+// )
+//)
+
+// ToDo: Only operate on pointers to object types
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::RandomAccessIterator )( T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef T& reference )
+, ( typedef T* pointer )
+, ( typedef T* postincrement_result )
+, ( typedef T* postdecrement_result )
+, ( typedef T& subscript_reference )
+)
+
+// ToDo: Only operate on pointers to object types
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T ) )
+, ( boost::generic::std_concept::RandomAccessIterator )( const T* )
+, ( typedef T value_type )
+, ( typedef std::ptrdiff_t difference_type )
+, ( typedef const T& reference )
+, ( typedef const T* pointer )
+, ( typedef const T* postincrement_result )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+// ToDo: Move this to a separate header
+#include <boost/generic/config/std_lib.hpp>
+
+#if BOOST_GENERIC_STD_LIB_IS_KNOWN()
+
+#include <boost/generic/detail/is_empty.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+
+#include <boost/generic/detail/std_forward_decl.hpp>
+#include <cstddef>
+
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( array_iterator )
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( deque_iterator )
+//#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( vector_bool_iterator )
+#include BOOST_GENERIC_DETAIL_FORWARD_DECL_HEADER( vector_iterator )
+
+// ToDo: Handle bitset types
+
+#if !BOOST_GENERIC_CONFIG_STD_LIB_ARRAY_ITERATOR_IS_POINTER()
+
+// array iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( array_iterator )
+, ( boost::generic::std_concept::RandomAccessIterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( array_iterator ) )
+)
+
+#endif
+
+#if !BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_ARRAY_ITERATOR() \
+ && !BOOST_GENERIC_CONFIG_STD_LIB_VECTOR_ITERATOR_IS_POINTER()
+
+// vector iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_iterator )
+, ( boost::generic::std_concept::RandomAccessIterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( vector_iterator ) )
+)
+
+#endif
+
+// deque iterator
+BOOST_GENERIC_CONCEPT_MAP
+( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( deque_iterator )
+, ( boost::generic::std_concept::RandomAccessIterator )
+ ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( deque_iterator ) )
+)
+
+// vector< bool > iterator
+//BOOST_GENERIC_CONCEPT_MAP
+//( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_bool_iterator )
+// BOOST_PP_COMMA_IF
+// ( BOOST_PP_COMPL
+// ( BOOST_GENERIC_DETAIL_IS_EMPTY
+// ( BOOST_GENERIC_DETAIL_FORWARD_DECL_PARAMS( vector_bool_iterator ) )
+// )
+// )
+// ( boost::generic::std_concept::RandomAccessIterator )
+// ( BOOST_GENERIC_DETAIL_FORWARD_DECL_NAME( vector_bool_iterator ) )
+//)
+
+#else
+
+BOOST_GENERIC_ASSERT_STD_LIB_IS_NOT_SUPPORTED()
+
+#endif
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANDOM_ACCESS_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Range; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implRange { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Range < T > > { typedef boost_generic_detail_params < T > type; }; template< class, class, class > struct b
oost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_first_passiterator { typedef ::boost::generic::detail::dummy_type_< 2 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_first_passiterator < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: iterator >::type > { typedef typename BoostGenericDetailConceptMap:: iterator type; }; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < iterator , BoostGenericDetailOtherTypenames... >
, typename ::boost::generic::detail::always_void < InputIterator < iterator > >::type > : ::boost::generic::detail::concept_is_valid < InputIterator < iterator > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passiterator < BoostGenericDetailConceptMap >::type iterator ; }; template< class, class, class > struct boost_generic_detail_deduce_0iterator { typedef ::boost::generic::detail::no_deduction type; }; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boos
t::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type begin (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_1 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( begin (::std::declval< T& >()) ) ) >::type > { typedef decltype ( begin (::std::declval< T& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_1 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGeneric
DetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator; template< typename T , class BoostGenericDetailAugiterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_1iterator < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugiterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugiterator iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterato
r > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_1iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_1iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < typename boost_generic_detail_return_type_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_1iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::b
oost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_1iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_0iterator< BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_1iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailBoostGenericDetailT > friend typename ::boost::disable_if_c < sizeof( BoostGenericDetailBoostGenericDetailT ) == sizeof( BoostGenericDetailBoostGenericDetailT ) >::type end (); template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_return_type_impl_2 { typedef ::boost::generic::detail::dummy_type type; }; template< typename T
 , class iterator , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_return_type_impl_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < iterator , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < decltype ( ( end (::std::declval< T& >()) ) ) >::type > { typedef decltype ( end (::std::declval< T& >()) ) type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames > struct boost_generic_detail_return_type_2 : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_return_type_impl_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_funs_deduce_
2iterator; template< typename T , class BoostGenericDetailAugiterator, class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_funs_deduce_2iterator < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailAugiterator, BoostGenericDetailOtherTypenames... > > { typedef BoostGenericDetailAugiterator iterator; static ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > boost_generic_detail_fun_deducer( ... ); template< class iterator > static ::boost::generic::detail::type_< iterator > boost_generic_detail_fun_deducer ( ::boost::generic::detail::type_ < iterator > ); }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_impl_this_deduce_2iterator : ::boost::mpl::identity < decltype( boost_generic_detail_impl_funs_deduce_2iterator< BoostGenericDetailParams, BoostGenericDetailTypenames >:: boost_generic_detail_fun_deducer ( ::boost::generic::detai
l::type_ < typename boost_generic_detail_return_type_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > ::type >() ) ) >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_this_deduce_2iterator : ::boost::mpl::if_c < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames >::value , boost_generic_detail_impl_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::generic::detail::type_< ::boost::generic::detail::dummy_type > >::type {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduce_2iterator : ::boost::generic::detail::deduction_result < typename boost_generic_detail_deduce_1iterator< BoostGenericDetailConceptMap , BoostGenericDet
ailParams, BoostGenericDetailTypenames >::type , boost_generic_detail_this_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceiterator : boost_generic_detail_deduce_2iterator < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_gen
eric_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Range; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: iterator >::value , boost_generic_detail_deduceiterator < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: iterator, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: iterator > >::type iterator; private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boo
st_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: iterator, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_1 < boost
_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , iterator > , ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames >::type , iterator > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Range < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_
is_valid_ < Range < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRange RangeBoostGenericDetailImpl; template< typename T > class Range : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRange:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Range < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRange boo
st_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Range < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef ty
pename boost_generic_detail_completed_concept_map:: iterator iterator; private: typedef ::boost::generic::detail::type_list < iterator , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename Range :: iterator , ::boost::generic::detail::no_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename Range :: iterator , ::boost::generic::detail::ambiguous_deduction >::value , "typename '" "iterator" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename Range :: iterator , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename Range :: iterator , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < InputIterator < typename Range :: iterator > > >::value , "typename '" "iterator" "' does not model '" "InputIterator" "'
." ); static_assert ( ::boost::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "begin" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_1 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , iterator > >::value , "the return type of " "begin" "( " "T&" " ) " "is not convertible to " "iterator" " " ); static_assert ( ::boost
::generic::detail::is_not_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type >::value , "requires " "iterator" " " "end" "( " "T&" " )" ); static_assert ( ::boost::mpl::or_ < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type > , ::boost::generic::detail::is_convertible_or_target_is_void < typename boost_generic_detail_concept_impl ::template boost_generic_detail_return_type_2 < boost_generic_detail_completed_concept_map , boost_generic_detail_params, boost_generic_detail_typenames >::type , iterator > >::value , "the return type of " "end" "( " "T&" " ) " "is not convertible to " "iterator" " " ); }; } } } namespace boost { namespace generic { namespace
 detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Range < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Range < T > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implRange type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< class T , std::size_t N > struct concept_map_ < boost::generic::std_concept::Range < T[N] > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { typedef T* iterator; iterator begin ( typename std::add_lvalue_reference<T[N]>::type a ) { return a; } iterator end ( typename std::add_lvalue_reference<T[N]>::type a ) { return a + N; } }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::Range < T[N] > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/range.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,58 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANGE_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANGE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/range.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [iterator.concepts.range]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Range)( (typename) T )
+, ( (InputIterator) iterator )
+, ( (iterator)(begin)( (T&) ) )
+, ( (iterator)(end)( (T&) ) )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (class) T, (std::size_t) N ) )
+, (boost::generic::std_concept::Range)( T[N] )
+, ( typedef T* iterator )
+, ( (iterator)(begin)( (typename std::add_lvalue_reference<T[N]>::type) a ), {
+ return a;
+ }
+ )
+, ( (iterator)(end)( (typename std::add_lvalue_reference<T[N]>::type) a ), {
+ return a + N;
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_RANGE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 32 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename X > class ShuffleIterator; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implShuffleIterator { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename X > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename X > struct boost_generic_detail_params_from_concept < ShuffleIterator < X > > { typedef boost_generic_detail_params < X > type; };
 template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ForwardIterator<X> >::type > : ::boost::generic::detail::concept_is_valid < ForwardIterator<X> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_d
etail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < OutputIterator < X , typename RvalueOf < typename ForwardIterator<X>::value_type >::type > >::type > : ::boost::generic::detail::concept_is_valid < OutputIterator < X , typename RvalueOf < typename ForwardIterator<X>::value_type >::type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_de
tail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < OutputIterator < X , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::type > : ::boost::generic::detail::concept_is_valid < OutputIterator < X , typename RvalueOf< typename ForwardIterator<X>::reference >::type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailPara
ms, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_4 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_4 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Constructible < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::type > : ::boost::generic::detail::concept_is_valid < Const
ructible < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_4 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_3 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_4 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_5 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_5 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::
always_void < MoveConstructible< typename ForwardIterator<X>::value_type > >::type > : ::boost::generic::detail::concept_is_valid < MoveConstructible< typename ForwardIterator<X>::value_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_5 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_4 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_5 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_6 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_6 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < Boo
stGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < MoveAssignable< typename ForwardIterator<X>::value_type > >::type > : ::boost::generic::detail::concept_is_valid < MoveAssignable< typename ForwardIterator<X>::value_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_6 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_5 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_6 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_7 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_7 < boost_gener
ic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < Swappable< typename ForwardIterator<X>::value_type > >::type > : ::boost::generic::detail::concept_is_valid < Swappable< typename ForwardIterator<X>::value_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_7 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_6 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_7 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_8 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boos
t_generic_detail_impl_requires_are_valid_8 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasAssign < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::type > : ::boost::generic::detail::concept_is_valid < HasAssign < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_8 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_7 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_8 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames ,
 class = void > struct boost_generic_detail_impl_requires_are_valid_9 : ::std::integral_constant< bool, false > {}; template< typename X , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_9 < boost_generic_detail_params < X > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < HasSwap< typename ForwardIterator<X>::reference , typename ForwardIterator<X>::reference > >::type > : ::boost::generic::detail::concept_is_valid < HasSwap< typename ForwardIterator<X>::reference , typename ForwardIterator<X>::reference > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_9 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_8 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_9 < BoostGe
nericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < X > > { private: typedef boost_generic_detail_first_pass < BoostGeneri
cDetailConceptMap , X > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ShuffleIterator; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < X > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_9< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename X > struct boost_generic_detail_completed_concept_map_from_concept
< BoostGenericDetailConceptMap , ShuffleIterator < X > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X > type; }; template< typename X , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ShuffleIterator < X > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , X >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implShuffleIterator ShuffleIteratorBoostGenericDetailImpl; template< typename X > class ShuffleIterator : boost_generic_concept_impl_detail:: boo
st_generic_detail_concept_implShuffleIterator:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ShuffleIterator < X > > ::boost_generic_concept_map_impl , X > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implShuffleIterator boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ShuffleIterator < X > > ::boost_generic_concept_map_impl , X > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < X > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_c
oncept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < ForwardIterator<X> >::value , "requires " "ForwardIterator<X>" ); static_assert ( ::boost::generic::detail::concept_is_valid < OutputIterator < X , typename RvalueOf < typename ForwardIterator<X>::value_type >::type > >::value , "requires " "OutputIterator < X , typename RvalueOf < typename ForwardIterator<X>::value_type >::type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < OutputIterator < X , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::value , "requires " "OutputIterator < X , typename RvalueOf< typ
ename ForwardIterator<X>::reference >::type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Constructible < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::value , "requires " "Constructible < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < MoveConstructible< typename ForwardIterator<X>::value_type > >::value , "requires " "MoveConstructible< typename ForwardIterator<X>::value_type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < MoveAssignable< typename ForwardIterator<X>::value_type > >::value , "requires " "MoveAssignable< typename ForwardIterator<X>::value_type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < Swappable< typename ForwardIterator<X>::value_type > >::value , "requires " "Swappable< typename ForwardIterator<X>::value_type >" ); static_assert ( ::boo
st::generic::detail::concept_is_valid < HasAssign < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type > >::value , "requires " "HasAssign < typename ForwardIterator<X>::value_type , typename RvalueOf< typename ForwardIterator<X>::reference >::type >" ); static_assert ( ::boost::generic::detail::concept_is_valid < HasSwap< typename ForwardIterator<X>::reference , typename ForwardIterator<X>::reference > >::value , "requires " "HasSwap< typename ForwardIterator<X>::reference , typename ForwardIterator<X>::reference >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename X > struct is_concept < ::boost:: generic:: std_concept:: ShuffleIterator < X > > : mpl::true_ {}; template< typename X > struct concept_impl_of < ::boost:: generic:: std_concept:: ShuffleIterator < X > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detai
l:: boost_generic_detail_concept_implShuffleIterator type; }; } } } namespace boost_generic_concept_map_detail { template< typename X > struct concept_map_ < ::boost:: generic:: std_concept:: ShuffleIterator < X > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ShuffleIterator < X > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,73 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_SHUFFLE_ITERATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_SHUFFLE_ITERATOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+#include <boost/generic/std_concept/concepts/has_swap.hpp>
+#include <boost/generic/std_concept/concepts/move_assignable.hpp>
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+#include <boost/generic/std_concept/concepts/rvalue_of.hpp>
+#include <boost/generic/std_concept/concepts/swappable.hpp>
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+#include <boost/generic/std_concept/iterator_concepts/output_iterator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/iterator_concepts/shuffle_iterator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [shuffle.iterators]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ShuffleIterator)( (typename) X )
+, ( requires ForwardIterator<X> )
+, ( requires OutputIterator
+ < X
+ , typename RvalueOf
+ < typename ForwardIterator<X>::value_type >::type
+ >
+ )
+, ( requires OutputIterator
+ < X
+ , typename RvalueOf< typename ForwardIterator<X>::reference >::type
+ >
+ )
+, ( requires Constructible
+ < typename ForwardIterator<X>::value_type
+ , typename RvalueOf< typename ForwardIterator<X>::reference >::type
+ >
+ )
+, ( requires MoveConstructible< typename ForwardIterator<X>::value_type > )
+, ( requires MoveAssignable< typename ForwardIterator<X>::value_type > )
+, ( requires Swappable< typename ForwardIterator<X>::value_type > )
+, ( requires HasAssign
+ < typename ForwardIterator<X>::value_type
+ , typename RvalueOf< typename ForwardIterator<X>::reference >::type
+ >
+ )
+, ( requires HasSwap< typename ForwardIterator<X>::reference
+ , typename ForwardIterator<X>::reference
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_ITERATOR_CONCEPTS_SHUFFLE_ITERATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS
+
+#if 0
+
+// [allocator.concepts]
+#include <boost/generic/std_concept/memory_concepts/allocator.hpp>
+
+// [allocator.concepts.legacy]
+#include <boost/generic/std_concept/memory_concepts/legacy_allocator.hpp>
+
+// [allocator.element.concepts]
+#include <boost/generic/std_concept/memory_concepts/has_allocator.hpp>
+#include <boost/generic/std_concept/memory_concepts/uses_allocator.hpp>
+#include <boost/generic/std_concept/memory_concepts/constructible_with_allocator.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocatable_element.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocatable_element.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocatable_element.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATABLE_ELEMENT_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATABLE_ELEMENT_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/free_store_allocatable.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/allocatable_element.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.element.concepts]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (AllocatableElement)( (class) Alloc, ((ObjectType)) T, (class,,,) Args )
+, ( requires Allocator<Alloc> )
+, ( requires FreeStoreAllocatable<T> )
+, ( (void)(this(Alloc) construct)( (T*), (Args&&,,,) ) )
+, ( (void)(this(Alloc) destroy)( (T*) p ), {
+ addressof(*p)->~T();
+ }
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATABLE_ELEMENT_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/allocator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,233 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATOR_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/detail/always_void.hpp>
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+#include <boost/generic/std_concept/concepts/free_store_allocatable.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <cstddef>
+#include <limits>
+#include <utility>
+
+namespace boost { namespace generic { namespace std_concept { namespace detail {
+
+struct unspecified_type {};
+
+template< class T, class Enabler = void >
+struct allocator_pointer_default
+{
+ typedef T* type;
+};
+
+template< class T >
+struct allocator_pointer_default
+ < T, typename generic::detail::always_void< typename T::pointer >::type >
+{
+ typedef typename T::pointer type;
+};
+
+template< class T, class Enabler = void >
+struct allocator_const_pointer_default
+{
+ typedef T const* type;
+};
+
+template< class T >
+struct allocator_const_pointer_default
+ < T, typename generic::detail::always_void
+ < typename T::const_pointer >::type
+ >
+{
+ typedef typename T::const_pointer type;
+};
+
+template< class T, class Enabler = void >
+struct allocator_generic_pointer_default
+{
+ typedef void* type;
+};
+
+template< class T >
+struct allocator_generic_pointer_default
+ < T, typename generic::detail::always_void
+ < typename T::generic_pointer >::type
+ >
+{
+ typedef typename T::generic_pointer type;
+};
+
+template< class T, class Enabler = void >
+struct allocator_const_generic_pointer_default
+{
+ typedef void const* type;
+};
+
+template< class T >
+struct allocator_const_generic_pointer_default
+ < T, typename generic::detail::always_void
+ < typename T::const_generic_pointer >::type
+ >
+{
+ typedef typename T::const_generic_pointer type;
+};
+
+template< class T, class Enabler = void >
+struct allocator_size_type_default
+{
+ typedef ::std::size_t type;
+};
+
+template< class T >
+struct allocator_size_type_default
+ < T, typename generic::detail::always_void
+ < typename T::size_type >::type
+ >
+{
+ typedef typename T::size_type type;
+};
+
+} } } }
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/allocator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.concepts]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Allocator)( (typename) X )
+, ( public (CopyConstructible<X>) (EqualityComparable<X>) )
+, ( (ObjectType) value_type, typename X::value_type )
+, ( requires FreeStoreAllocatable<value_type> )
+, ( (HasDereference) pointer,
+ typename generic::detail::allocator_pointer_default< X >::type
+ )
+, ( (HasDereference) const_pointer,
+ typename generic::detail::allocator_const_pointer_default< X >::type
+ )
+, ( requires RandomAccessIterator<pointer> )
+, ( requires RandomAccessIterator<const_pointer> )
+, ( (SignedIntegralLike) difference_type,
+ typename RandomAccessIterator<pointer>::difference_type
+ )
+, ( typename generic_pointer,
+ typename generic::detail::allocator_generic_pointer_default< X >::type
+ )
+, ( typename const_generic_pointer,
+ typename generic::detail::allocator_generic_const_pointer_default< X >
+ ::type
+ )
+, ( typename reference, value_type& )
+, ( typename const_reference, const value_type& )
+, ( (UnsignedIntegralLike) size_type, )
+, ( template ( ((ObjectType)) T ) class rebind_type )
+, ( requires HasDestructor<value_type> )
+, ( requires Convertible<pointer,const_pointer> )
+, ( requires Convertible<pointer,generic_pointer> )
+, ( requires SameType< typename HasDereference< pointer >::result_type
+ , value_type&
+ >
+ )
+, ( requires SameType< typename HasDereference< pointer >::result_type
+ , reference
+ >
+ )
+, ( requires Convertible<const_pointer,const_generic_pointer> )
+, ( requires SameType< typename HasDereference< const_pointer >::result_type
+ , const value_type&
+ >
+ )
+, ( requires SameType< typename HasDereference< const_pointer >::result_type
+ , const_reference
+ >
+ )
+, ( requires SameType< rebind_type<value_type>, X > )
+, ( requires SameType< generic_pointer
+ , typename rebind_type< detail::unspecified_type >
+ ::generic_pointer
+ >
+ )
+, ( requires SameType< const_generic_pointer
+ , typename rebind_type< detail::unspecified_type >
+ ::const_generic_pointer
+ >
+ )
+, ( (pointer)(this(X) allocate)( (size_type) n ) )
+, ( (pointer)(this(X) allocate)( (size_type) n, (const_generic_pointer) p ) )
+, ( (void)(this(X) deallocate)( (pointer) p, (size_type) n ) )
+, ( (size_type)(this(X) max_size)() const,
+ { return ::std::numeric_limits<size_type>::max(); }
+ )
+, ( template ( ((ObjectType)) T ) (this(T))( const rebind_type<T>& y ) )
+, ( (pointer)(this(X) addressof)( (reference) r ) const, {
+ return addressof(r); // ToDo: Make this work, refer to working paper
+ }
+ )
+, ( (const_pointer)(this(X) addressof)( (const_reference) r ) const, {
+ return addressof(r); // ToDo: Make this work, refer to working paper
+ }
+ )
+, ( (X)(select_on_container_copy_construction)( (const X&) x ), { return x; } )
+, ( (X)(select_on_container_move_construction)( (X&&) x ), {
+ return std::move( x );
+ }
+ )
+, ( (void)(do_on_container_copy_assignment)( (X&) to, (const X&) from ), {} )
+, ( (void)(do_on_container_move_assignment)( (X&) to, (X&&) from ), {} )
+, ( (void)(do_on_container_swap)( (X&) a, (X&) b ), {} )
+)
+
+} } }
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/memory_concepts/legacy_allocator.hpp>
+#endif
+
+#include <boost/generic/concept_map.hpp>
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( ((LegacyAllocator)) X ) )
+, (Allocator)(X)
+, ( typedef typename X::value_type value_type )
+, ( typedef typename X::pointer pointer )
+, ( typedef typename X::const_pointer const_pointer )
+, ( typedef typename X::generic_pointer generic_pointer )
+, ( typedef typename X::const_generic_pointer const_generic_pointer )
+, ( typedef typename X::difference_type difference_type )
+, ( typedef typename X::size_type size_type )
+, ( typedef typename X::reference reference )
+, ( typedef typename X::const_reference const_reference )
+, ( template ( ((ObjectType)) )
+ using rebind_type, typename X::template rebind // ToDo: Verify this is proper implementation
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_ALLOCATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/constructible_with_allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/constructible_with_allocator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MCONS_CONSTRUCTIBLE_WITH_ALLOCATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MCONS_CONSTRUCTIBLE_WITH_ALLOCATOR_HPP
+
+#include <boost/generic/concept.hpp>
+
+namespace boost { namespace generic { namespace std_concept {
+
+struct allocator_arg_t {};
+
+} } }
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/constructible_with_allocator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.element.concepts]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ConstructibleWithAllocator)( (class) T, (class) Alloc, (class,,,) Args )
+, ( (this(T))( (allocator_arg_t), (Alloc), (Args&&,,,) ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MCONS_CONSTRUCTIBLE_WITH_ALLOCATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/has_allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/has_allocator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_HAS_ALLOCATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_HAS_ALLOCATOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocator.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/has_allocator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.element.concepts]
+BOOST_GENERIC_AUTO_CONCEPT
+( (HasAllocatorType)( (typename) T )
+, ( typename allocator_type, typename T::allocator_type )
+, ( requires Allocator<allocator_type> )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_HAS_ALLOCATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/legacy_allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/legacy_allocator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,100 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_LEGACY_ALLOCATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_LEGACY_ALLOCATOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/default_constructible.hpp>
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+#include <boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/legacy_allocator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.concepts.legacy]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (LegacyAllocator)(X)
+, ( public (DefaultConstructible<X>) (CopyConstructible<X>)
+ (EqualityComparable<X>)
+ )
+, ( (HasDereference) pointer, typename X::pointer )
+, ( (HasDereference) const_pointer, typename X::const_pointer )
+, ( typename generic_pointer, void* )
+, ( typename const_generic_pointer, const void* )
+, ( typename reference, typename X::reference )
+, ( typename const_reference, typename X::const_reference )
+, ( (ObjectType) value_type, typename X::value_type )
+, ( (UnsignedIntegralLike) size_type, typename X::size_type )
+, ( (SignedIntegralLike) difference_type, typename X::difference_type )
+//, ( template ( ((ObjectType)) T ) class rebind, // ToDo: Implement
+// )
+, ( requires HasDestructor<value_type> )
+, ( requires RandomAccessIterator<pointer> )
+, ( requires RandomAccessIterator<const_pointer> )
+, ( requires Convertible<pointer, const_pointer> )
+, ( requires Convertible<pointer, generic_pointer> )
+, ( requires SameType< typename HasDereference<pointer>::result_type
+ , value_type&
+ >
+ )
+, ( requires SameType< typename HasDereference<pointer>::result_type
+ , reference
+ >
+ )
+, ( requires Convertible<const_pointer, const_generic_pointer> )
+, ( requires SameType< typename HasDerefence<const_pointer>::result_type
+ , const value_type&
+ >
+ )
+, ( requires SameType< typename HasDerefence<const_pointer>::result_type
+ , const_reference
+ >
+ )
+, ( requires IntegralType<size_type> )
+, ( requires IntegralType<difference_type> )
+, ( (pointer)(this(X) address)( (reference) r ) const )
+, ( (const_pointer)(this(X) address)( (const_reference) r ) const )
+, ( (pointer)(this(X) allocate)( (size_type) n ) )
+, ( (pointer)(this(X) allocate)( (size_type) n, (generic_pointer) p ), {
+ return X::allocate(n);
+ }
+ )
+, ( (void)(this(X) deallocate)( (pointer) p, (const value_type&) ) )
+, ( (size_type)(this(X) max_size)() const )
+, ( template ( ((ObjectType)) T ) // ToDo: Add requires as in working paper
+ (this(X))( (const typename rebind<T>::other&) y)
+ )
+, ( requires CopyConstructible<value_type> )
+, ( (void)(this(X) construct)( (pointer) p, (const value_type&) ) )
+, ( (void)(this(X) destroy)( (pointer) p ) )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_LEGACY_ALLOCATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/memory_concepts/uses_allocator.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/memory_concepts/uses_allocator.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_USES_ALLOCATOR_HPP
+#define BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_USES_ALLOCATOR_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocator.hpp>
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/memory_concepts/uses_allocator.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [allocator.element.concepts]
+BOOST_GENERIC_AUTO_CONCEPT
+( (UsesAllocator)( (typename) T, (typename) Alloc )
+, ( requires Allocator<Alloc> )
+, ( typename allocator_type, typename T::allocator_type )
+, ( requires Allocator<allocator_type> )
+, ( requires Convertible<Alloc, allocator_type> )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPT_MEMORY_CONCEPTS_USES_ALLOCATOR_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPT_SUPPORT_CONCEPTS_HPP
+#define BOOST_GENERIC_STD_CONCEPT_SUPPORT_CONCEPTS_HPP
+
+// [concept.support]
+#include <boost/generic/std_concept/support_concepts/returnable.hpp>
+#include <boost/generic/std_concept/support_concepts/pointee_type.hpp>
+#include <boost/generic/std_concept/support_concepts/member_pointee_type.hpp>
+#include <boost/generic/std_concept/support_concepts/referent_type.hpp>
+#include <boost/generic/std_concept/support_concepts/variable_type.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+#include <boost/generic/std_concept/support_concepts/class_type.hpp>
+#include <boost/generic/std_concept/support_concepts/class.hpp>
+#include <boost/generic/std_concept/support_concepts/polymorphic_class.hpp>
+#include <boost/generic/std_concept/support_concepts/union.hpp>
+#include <boost/generic/std_concept/support_concepts/trivial_type.hpp>
+#include <boost/generic/std_concept/support_concepts/standard_layout_type.hpp>
+#include <boost/generic/std_concept/support_concepts/literal_type.hpp>
+#include <boost/generic/std_concept/support_concepts/scalar_type.hpp>
+#include <boost/generic/std_concept/support_concepts/arithmetic_type.hpp>
+#include <boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+#include <boost/generic/std_concept/support_concepts/enumeration_type.hpp>
+#include <boost/generic/std_concept/support_concepts/floating_point_type.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <boost/generic/std_concept/support_concepts/derived_from.hpp>
+
+#endif // BOOST_GENERIC_STD_CONCEPT_SUPPORT_CONCEPTS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ArithmeticType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implArithmeticType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ArithmeticType < T > > { typedef boost_generic_detail_params < T > type; }; te
mplate< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ScalarType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ScalarType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True
< std::is_arithmetic< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_arithmetic< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_g
eneric_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ScalarType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ScalarType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ArithmeticType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_par
ams_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ArithmeticType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ArithmeticType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptM
ap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticType ArithmeticTypeBoostGenericDetailImpl; template< typename T > class ArithmeticType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ArithmeticType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concep
t_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ArithmeticType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ScalarType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be su
bstituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_arithmetic< T >::value > >::value , "requires " "True< std::is_arithmetic< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ArithmeticType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ArithmeticType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implArithmeticType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ArithmeticType < T > > { static bool co
nst is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ArithmeticType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/arithmetic_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ARITHMETIC_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ARITHMETIC_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/scalar_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/arithmetic_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ArithmeticType)( (typename) T ), ( public ScalarType< T > )
+, ( requires True< std::is_arithmetic< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ARITHMETIC_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Class; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implClass { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Class < T > > { typedef boost_generic_detail_params < T > type; }; template< class, class, class
, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ClassType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ClassType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< !std::is_union< T >::value
> >::type > : ::boost::generic::detail::concept_is_valid < True< !std::is_union< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < Boost
GenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ClassType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ClassType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Class; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_lis
t < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Class < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Class < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostG
enericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClass ClassBoostGenericDetailImpl; template< typename T > class Class : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClass:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Class < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClass boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_
< Class < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ClassType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::d
etail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< !std::is_union< T >::value > >::value , "requires " "True< !std::is_union< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Class < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Class < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClass type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Class < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typed
ef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Class < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/class.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/class_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/class.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Class)( (typename) T ), ( public ClassType< T > )
+, ( requires True< !std::is_union< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ClassType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implClassType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ClassType < T > > { typedef boost_generic_detail_params < T > type; }; template< class,
class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_class< T >::value || std::is_union< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_class< T >::value || std::is_union< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , Boo
stGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailCo
nceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ClassType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class Bo
ostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ClassType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ClassType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClassType ClassTypeBoostGenericDetailImpl; templ
ate< typename T > class ClassType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClassType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ClassType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClassType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ClassType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_s
ucceeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_class< T >::value || std::is_union< T >::value > >::value , "requires " "True< std::is_class< T >::value || std::is_union< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ClassType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ClassType < T > > { static bool const is_specialized = false; static bool const is_auto =
 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implClassType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ClassType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ClassType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/class_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/class_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ClassType)( (typename) T )
+, ( requires True< std::is_class< T >::value || std::is_union< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_CLASS_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 46 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename Derived , typename Base > class DerivedFrom; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implDerivedFrom { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename Derived , typename Base > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename Derived , typename Base > struct boost_generic_detail_params_from_concept < DerivedFrom < Deri
ved , Base > > { typedef boost_generic_detail_params < Derived , Base > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename Derived , typename Base , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < Derived , Base > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ClassType< Derived > >::type > : ::boost::generic::detail::concept_is_valid < ClassType< Derived > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires
_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename Derived , typename Base , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < Derived , Base > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < ClassType< Base > >::type > : ::boost::generic::detail::concept_is_valid < ClassType< Base > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_ge
neric_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_3 : ::std::integral_constant< bool, false > {}; template< typename Derived , typename Base , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_3 < boost_generic_detail_params < Derived , Base > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< detail::is_public_base_of< Base, Derived >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< detail::is_public_base_of< Base, Derived >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGene
ricDetailTypenames > struct boost_generic_detail_requires_are_valid_3 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_2 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_3 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename Derived , typename Base > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename Derived , typename Base > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < Derived , Base > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std:
:true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename Derived , typename Base > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < Derived , Base > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , Derived , Base > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map DerivedFrom; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < Derived , Base > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail
_parent_sub_succeeded , boost_generic_detail_requires_are_valid_3< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename Derived , typename Base > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , DerivedFrom < Derived , Base > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , Derived , Base > type; }; template< typename Derived , typename Base , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < DerivedFrom < Derived , Base > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , Derived , Base >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_gene
ric_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDerivedFrom DerivedFromBoostGenericDetailImpl; template< typename Derived , typename Base > class DerivedFrom : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDerivedFrom:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < DerivedFrom < Derived , Base > > ::boost_generic_concept_map_impl , Derived , Base > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDerivedFrom boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Der
ivedFrom < Derived , Base > > ::boost_generic_concept_map_impl , Derived , Base > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < Derived , Base > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < ClassType<
Derived > >::value , "requires " "ClassType< Derived >" ); static_assert ( ::boost::generic::detail::concept_is_valid < ClassType< Base > >::value , "requires " "ClassType< Base >" ); static_assert ( ::boost::generic::detail::concept_is_valid < True< detail::is_public_base_of< Base, Derived >::value > >::value , "requires " "True< detail::is_public_base_of< Base, Derived >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename Derived , typename Base > struct is_concept < ::boost:: generic:: std_concept:: DerivedFrom < Derived , Base > > : mpl::true_ {}; template< typename Derived , typename Base > struct concept_impl_of < ::boost:: generic:: std_concept:: DerivedFrom < Derived , Base > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implDerivedFrom type; }; } } } namespace boost_generic_concept_map_detail { template< typename Deri
ved , typename Base > struct concept_map_ < ::boost:: generic:: std_concept:: DerivedFrom < Derived , Base > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: DerivedFrom < Derived , Base > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/derived_from.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,63 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_DERIVED_FROM_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_DERIVED_FROM_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/class_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/mpl/and.hpp>
+#include <type_traits>
+
+namespace boost { namespace generic { namespace std_concept { namespace detail {
+
+template< class Base, class Derived >
+struct is_public_base_of_impl
+ : std::is_convertible< typename std::remove_cv< Derived >::type*, Base* > {};
+
+template< class Base, class Derived >
+struct is_public_base_of
+ : mpl::and_< std::is_base_of< Base, Derived >
+ , is_public_base_of_impl< Base, Derived >
+ > {};
+
+} } } }
+
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/derived_from.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// TODO make sure that this should only detect public bases
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (DerivedFrom)( (typename) Derived, (typename) Base )
+, ( requires ClassType< Derived > )
+, ( requires ClassType< Base > )
+, ( requires True< detail::is_public_base_of< Base, Derived >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_DERIVED_FROM_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class EnumerationType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implEnumerationType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < EnumerationType < T > > { typedef boost_generic_detail_params < T > type; };
 template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < IntegralConstantExpressionType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , IntegralConstantExpressionType< T > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailEnabler = void > struct boost_generic_detail_providedunderlying_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< class BoostGenericDetailConceptMap > struct boost_generic_detail_providedunderlying_type < BoostGenericDetailConceptMap , typename ::boost::generic::detail::always_void < typename BoostGenericDetailConceptMap:: underlying_type >
::type > { typedef typename BoostGenericDetailConceptMap:: underlying_type type; }; template< class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailEnabler = void > struct boost_generic_detail_typename_defaultunderlying_type { typedef ::boost::generic::detail::dummy_type_< 3 > type; }; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_typename_defaultunderlying_type < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < typename std::underlying_type< T >::type >::type > { typedef typename std::underlying_type< T >::type type; }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class BoostGenericDetailTypenames , class BoostGenericDetailProvidedName = typename boost_generic_detail_providedunderlying_type < BoostGenericDetailConceptMap >::type > struct boost_generic_detail_first_passunderl
ying_type : ::boost::mpl::if_c < ::boost::mpl::and_ < ::boost::generic::detail::is_dummy_type < BoostGenericDetailProvidedName > , boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > >::value , boost_generic_detail_typename_defaultunderlying_type < BoostGenericDetailParams, BoostGenericDetailTypenames > , ::boost::mpl::identity< BoostGenericDetailProvidedName > >::type {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class underlying_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < underlying_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < IntegralType < underlying_type > >::type > : ::
boost::generic::detail::concept_is_valid < IntegralType < underlying_type > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_2 : ::std::integral_constant< bool, false > {}; template< typename T , class underlying_type , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_2 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < underlying_type , BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::alw
ays_void < True< std::is_enum< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_enum< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_2 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_1 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_2 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { typedef typename boost_generic_detail_first_passunderlying_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < void****** > >::type underlying_type ; }; template< class, class, class > struct boost_generic_detail_deduce_0underlying_type { typedef ::boost::generic::detail::no_deduction type;
 }; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_deduceunderlying_type : boost_generic_detail_deduce_0underlying_type < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > {}; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < IntegralConstantExpressionType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , IntegralConstantExpressionType< T > > { typedef ::std::true_type boost_gen
eric_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map EnumerationType; public: typedef typename ::boost::mpl::eval_if_c < ::boost::generic::detail::is_dummy_type < typename boost_generic_detail_typename_deducers:: underlying_type >::value , boost_generic_detail_deduceunderlying_type < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , ::boost::generic::detail::type_list < typename boost_generic_detail_typename_deducers:: underlying_type, void********** > > , ::boost::mpl::identity < typename boost_generic_detail_typename_deducers:: underlying_type > >::type underlying_type; private: template< class, class > friend struc
t boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < typename boost_generic_detail_completed_concept_map_:: underlying_type, void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_2< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > , ::boost::generic::detail::is_not_deduction_error< underlying_type > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Enumeration
Type < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < EnumerationType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEnumerationType EnumerationTypeBoostGenericDetailImpl; template< typename T > class EnumerationType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEnumerationTyp
e:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EnumerationType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEnumerationType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < EnumerationType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < IntegralConstantExpressionType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::s
td::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: typedef typename boost_generic_detail_completed_concept_map:: underlying_type underlying_type; private: typedef ::boost::generic::detail::type_list < underlying_type , void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::is_not_same < typename EnumerationType :: underlying_type , ::boost::generic::detail::no_deduction >::value , "typename '" "underlying_type" "' was not explicitly satisfied and cannot be deduced." ); static_assert ( ::boost::generic::detail::is_not_same < typename EnumerationType :: underlying_type , ::boost::ge
neric::detail::ambiguous_deduction >::value , "typename '" "underlying_type" "' was not explicitly satisfied and deduction results in ambiguity." ); static_assert ( ::boost::mpl::or_ < ::boost::is_same < typename EnumerationType :: underlying_type , ::boost::generic::detail::no_deduction > , ::boost::is_same < typename EnumerationType :: underlying_type , ::boost::generic::detail::ambiguous_deduction > , ::boost::generic::detail::concept_is_valid < IntegralType < typename EnumerationType :: underlying_type > > >::value , "typename '" "underlying_type" "' does not model '" "IntegralType" "'." ); static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_enum< T >::value > >::value , "requires " "True< std::is_enum< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: EnumerationType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept::
EnumerationType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implEnumerationType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: EnumerationType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: EnumerationType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/enumeration_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,48 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ENUMERATION_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ENUMERATION_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/enumeration_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// TODO update this once underlying_type is supported
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (EnumerationType)( (typename) T )
+, ( public IntegralConstantExpressionType< T > )
+//, ( (IntegralType) underlying_type, int )
+, ( (IntegralType) underlying_type, typename std::underlying_type< T >::type )
+, ( requires True< std::is_enum< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_ENUMERATION_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class FloatingPointType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implFloatingPointType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < FloatingPointType < T > > { typedef boost_generic_detail_params < T > ty
pe; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ArithmeticType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ArithmeticType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::a
lways_void < True< std::is_floating_point< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_floating_point< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , ty
pename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ArithmeticType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ArithmeticType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map FloatingPointType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_p
arams < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , FloatingPointType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < FloatingPointType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_complete
d_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointType FloatingPointTypeBoostGenericDetailImpl; template< typename T > class FloatingPointType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FloatingPointType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointType boost_generic_detai
l_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < FloatingPointType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ArithmeticType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_gener
ic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_floating_point< T >::value > >::value , "requires " "True< std::is_floating_point< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: FloatingPointType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: FloatingPointType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implFloatingPointType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct conc
ept_map_ < ::boost:: generic:: std_concept:: FloatingPointType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: FloatingPointType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/floating_point_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_FLOATING_POINT_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_FLOATING_POINT_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/arithmetic_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/floating_point_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (FloatingPointType)( (typename) T )
+, ( public ArithmeticType< T > )
+, ( requires True< std::is_floating_point< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_FLOATING_POINT_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class IntegralConstantExpressionType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implIntegralConstantExpressionType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < IntegralConstantExpressionType < T > > { typed
ef boost_generic_detail_params < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ScalarType< T >, NonTypeTemplateParameterType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ScalarType< T >, NonTypeTemplateParameterType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::gene
ric::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_integral< T >::value || std::is_enum< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_integral< T >::value || std::is_enum< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_d
etail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ScalarType< T >, NonTypeTemplateParameterType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ScalarType< T >, NonTypeTemplateParameterType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map IntegralConstantExpression
Type; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , IntegralConstantExpressionType < T > > { typedef boost_generic_detail_completed_concept_map <
 BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < IntegralConstantExpressionType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralConstantExpressionType IntegralConstantExpressionTypeBoostGenericDetailImpl; template< typename T > class IntegralConstantExpressionType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralConstantExpre
ssionType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralConstantExpressionType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralConstantExpressionType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralConstantExpressionType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ScalarType< T >, NonTypeTemplateParameterType< T > >() ) >::type::val
ue , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_integral< T >::value || std::is_enum< T >::value > >::value , "requires " "True< std::is_integral< T >::value || std::is_enum< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: IntegralConstantExpressionType < T > >
 : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: IntegralConstantExpressionType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralConstantExpressionType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: IntegralConstantExpressionType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: IntegralConstantExpressionType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SCONS_INTEGRAL_CONSTANT_EXPRESSION_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SCONS_INTEGRAL_CONSTANT_EXPRESSION_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp>
+#include <boost/generic/std_concept/support_concepts/scalar_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/integral_constant_expression_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (IntegralConstantExpressionType)( (typename) T )
+, ( public (ScalarType< T >) (NonTypeTemplateParameterType< T >) )
+, ( requires True< std::is_integral< T >::value || std::is_enum< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SCONS_INTEGRAL_CONSTANT_EXPRESSION_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class IntegralType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implIntegralType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < IntegralType < T > > { typedef boost_generic_detail_params < T > type; }; template
< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < IntegralConstantExpressionType< T >, ArithmeticType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , IntegralConstantExpressionType< T >, ArithmeticType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetai
lOtherTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_integral< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_integral< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; te
mplate< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < IntegralConstantExpressionType< T >, ArithmeticType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , IntegralConstantExpressionType< T >, ArithmeticType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map IntegralType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef bo
ost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , IntegralType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_gene
ric_detail_is_valid_ < IntegralType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralType IntegralTypeBoostGenericDetailImpl; template< typename T > class IntegralType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_imp
l_detail:: boost_generic_detail_concept_implIntegralType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < IntegralType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < IntegralConstantExpressionType< T >, ArithmeticType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::
instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_integral< T >::value > >::value , "requires " "True< std::is_integral< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: IntegralType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: IntegralType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implIntegralType type; }; } }
} namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: IntegralType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: IntegralType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/integral_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_INTEGRAL_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_INTEGRAL_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp>
+#include <boost/generic/std_concept/support_concepts/arithmetic_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/integral_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (IntegralType)( (typename) T )
+, ( public (IntegralConstantExpressionType< T >) (ArithmeticType< T >) )
+, ( requires True< std::is_integral< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_INTEGRAL_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 63 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class LiteralType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implLiteralType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < LiteralType < T > > { typedef boost_generic_detail_params < T > type; }; template< c
lass, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ValueType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< detail::i
s_literal< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< detail::is_literal< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_deta
il_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ValueType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map LiteralType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::
boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , LiteralType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < LiteralType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generi
c_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLiteralType LiteralTypeBoostGenericDetailImpl; template< typename T > class LiteralType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLiteralType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LiteralType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLiteralType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_co
mpleted_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < LiteralType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ValueType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: do
ing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< detail::is_literal< T >::value > >::value , "requires " "True< detail::is_literal< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: LiteralType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: LiteralType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implLiteralType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: LiteralType < T > > { static bool const is_auto_concept_definition = true, is_usable = true;
 struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: LiteralType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/literal_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,76 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_LITERAL_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_LITERAL_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/mpl/and.hpp>
+
+#include <boost/mpl/or.hpp>
+#include <type_traits>
+
+// ToDo: Make this work with intrinsics
+
+// ToDo: Define concept maps for builtin literal types
+
+namespace boost { namespace generic { namespace std_concept { namespace detail {
+
+template< class T >
+struct is_array_of_literal_types;
+
+// ToDo: Check if this should not include incomplete array types
+template< class T >
+struct is_builtin_literal_type
+ : mpl::or_
+ < std::is_scalar< T >
+ , is_array_of_literal_types< T >
+ > {};
+
+template< class T >
+struct is_array_of_literal_types_impl
+ : is_builtin_literal_type< typename std::remove_all_extents< T >::type > {};
+
+template< class T >
+struct is_array_of_literal_types
+ : mpl::and_< std::is_array< T >, is_array_of_literal_types_impl< T > > {};
+
+template< class T >
+struct is_literal : is_builtin_literal_type< T > {};
+
+} } } }
+
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/literal_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (LiteralType)( (typename) T ), ( public ValueType< T > )
+, ( requires True< detail::is_literal< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_LITERAL_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class MemberPointeeType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implMemberPointeeType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < MemberPointeeType < T > > { typedef boost_generic_detail_params < T > ty
pe; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_object< T >::value || std::is_function< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value || std::is_function< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < Bo
ostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent
_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map MemberPointeeType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_conc
ept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , MemberPointeeType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < MemberPointeeType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_conc
ept_implMemberPointeeType MemberPointeeTypeBoostGenericDetailImpl; template< typename T > class MemberPointeeType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberPointeeType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberPointeeType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberPointeeType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < MemberPointeeType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; type
def typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value || std::is_function< T >::value > >::value , "requires " "True< std::is_object< T >::value || std::is_function< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: MemberPointeeType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_
of < ::boost:: generic:: std_concept:: MemberPointeeType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implMemberPointeeType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: MemberPointeeType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: MemberPointeeType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/member_pointee_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_MEMBER_POINTEE_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_MEMBER_POINTEE_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/member_pointee_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (MemberPointeeType)( (typename) T )
+, ( requires True< std::is_object< T >::value
+ || std::is_function< T >::value
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_MEMBER_POINTEE_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,6 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class NonTypeTemplateParameterType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implNonTypeTemplateParameterType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < NonTypeTemplateParameterType < T > > { typedef boo
st_generic_detail_params < T > type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < VariableType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , VariableType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typenam
e ::boost::generic::detail::always_void < True < std::is_integral< T >::value || std::is_enum< T >::value || std::is_pointer< T >::value || std::is_reference< T >::value
+> >::type > : ::boost::generic::detail::concept_is_valid < True < std::is_integral< T >::value || std::is_enum< T >::value || std::is_pointer< T >::value || std::is_reference< T >::value
+> > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::de
tail::always_void < VariableType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , VariableType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map NonTypeTemplateParameterType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boos
t_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , NonTypeTemplateParameterType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < NonTypeTemplateParameterType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConc
eptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNonTypeTemplateParameterType NonTypeTemplateParameterTypeBoostGenericDetailImpl; template< typename T > class NonTypeTemplateParameterType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNonTypeTemplateParameterType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < NonTypeTemplateParameterType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNonTypeTemplateParameterType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_conc
ept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < NonTypeTemplateParameterType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < VariableType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "paramete
rs unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True < std::is_integral< T >::value || std::is_enum< T >::value || std::is_pointer< T >::value || std::is_reference< T >::value
+> >::value , "requires " "True < std::is_integral< T >::value || std::is_enum< T >::value || std::is_pointer< T >::value || std::is_reference< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: NonTypeTemplateParameterType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: NonTypeTemplateParameterType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implNonTypeTemplateParameterType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: NonTypeTemplateParameterType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy
 = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: NonTypeTemplateParameterType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SCONS_NON_TYPE_TEMPLATE_PARAMETER_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SCONS_NON_TYPE_TEMPLATE_PARAMETER_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/variable_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/non_type_template_parameter_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (NonTypeTemplateParameterType)( (typename) T ), ( public VariableType< T > )
+, ( requires True
+ < std::is_integral< T >::value
+ || std::is_enum< T >::value
+ || std::is_pointer< T >::value
+ || std::is_reference< T >::value
+ // ToDo: Add archetype check as well
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SCONS_NON_TYPE_TEMPLATE_PARAMETER_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ObjectType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implObjectType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ObjectType < T > > { typedef boost_generic_detail_params < T > type; }; template< clas
s, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ReferentType< T >, PointeeType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ReferentType< T >, PointeeType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic
::detail::always_void < True< std::is_object< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typenam
e T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ReferentType< T >, PointeeType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ReferentType< T >, PointeeType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ObjectType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef bo
ost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ObjectType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ObjectType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_co
mpleted_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implObjectType ObjectTypeBoostGenericDetailImpl; template< typename T > class ObjectType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implObjectType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ObjectType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implObjectType boost_generic_detail_concept_impl; typedef typename boo
st_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ObjectType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ReferentType< T >, PointeeType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succee
ded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value > >::value , "requires " "True< std::is_object< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ObjectType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ObjectType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implObjectType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ObjectType < T > >
{ static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ObjectType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/object_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_OBJECT_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_OBJECT_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/referent_type.hpp>
+#include <boost/generic/std_concept/support_concepts/pointee_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/object_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ObjectType)( (typename) T ), ( public (ReferentType< T >) (PointeeType< T >) )
+, ( requires True< std::is_object< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_OBJECT_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 46 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class PointeeType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implPointeeType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < PointeeType < T > > { typedef boost_generic_detail_params < T > type; }; template< c
lass, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True < std::is_object< T >::value || std::is_void< T >::value || detail::safe_is_function< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True < std::is_object< T >::value || std::is_void< T >::value || detail::safe_is_function< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mp
l::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_de
tail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map PointeeType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class,
class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , PointeeType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < PointeeType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_i
mpl_detail:: boost_generic_detail_concept_implPointeeType PointeeTypeBoostGenericDetailImpl; template< typename T > class PointeeType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPointeeType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < PointeeType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPointeeType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < PointeeType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef
typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True < std::is_object< T >::value || std::is_void< T >::value || detail::safe_is_function< T >::value > >::value , "requires " "True < std::is_object< T >::value || std::is_void< T >::value || detail::safe_is_function< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: PointeeType < T
> > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: PointeeType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPointeeType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: PointeeType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: PointeeType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/pointee_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,64 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POINTEE_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POINTEE_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/function_types/is_function.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <type_traits>
+
+namespace boost { namespace generic { namespace std_concept { namespace detail {
+
+template< class T >
+struct safe_is_function
+ : function_types::is_function< T, function_types::non_cv > {};
+
+template< class T >
+struct safe_is_function< T& > : std::integral_constant< bool, false > {};
+
+template< class T >
+struct safe_is_function< T&& > : std::integral_constant< bool, false > {};
+
+} } } }
+
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/pointee_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (PointeeType)( (typename) T )
+, ( requires True
+ < std::is_object< T >::value
+ || std::is_void< T >::value
+ || detail::safe_is_function< T >::value
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POINTEE_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class PolymorphicClass; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implPolymorphicClass { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < PolymorphicClass < T > > { typedef boost_generic_detail_params < T > type;
 }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < Class< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , Class< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< st
d::is_polymorphic< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_polymorphic< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_gen
eric_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < Class< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , Class< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map PolymorphicClass; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; type
def ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , PolymorphicClass < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < PolymorphicClass < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T
>::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPolymorphicClass PolymorphicClassBoostGenericDetailImpl; template< typename T > class PolymorphicClass : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPolymorphicClass:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < PolymorphicClass < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPolymorphicClass boost_generic_detail_concept_impl; typedef typename boost_generic_detail_
concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < PolymorphicClass < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < Class< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be
 substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_polymorphic< T >::value > >::value , "requires " "True< std::is_polymorphic< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: PolymorphicClass < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: PolymorphicClass < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implPolymorphicClass type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: PolymorphicClass < T > > { s
tatic bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: PolymorphicClass < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/polymorphic_class.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POLYMORPHIC_CLASS_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POLYMORPHIC_CLASS_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/class.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/polymorphic_class.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (PolymorphicClass)( (typename) T ), ( public Class< T > )
+, ( requires True< std::is_polymorphic< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_POLYMORPHIC_CLASS_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ReferentType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implReferentType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ReferentType < T > > { typedef boost_generic_detail_params < T > type; }; template
< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True < std::is_reference< T >::value || std::is_object< T >::value || function_types::is_function< T, function_types::non_cv > ::value > >::type > : ::boost::generic::detail::concept_is_valid < True < std::is_reference< T >::value || std::is_object< T >::value || function_types::is_function< T, function_types::non_cv > ::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypen
ames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< clas
s BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ReferentType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detai
l_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ReferentType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ReferentType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , Boost
GenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReferentType ReferentTypeBoostGenericDetailImpl; template< typename T > class ReferentType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReferentType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ReferentType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReferentType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ReferentType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct
instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True < std::is_reference< T >::value || std::is_object< T >::value || function_types::is_function< T, function_types::non_cv > ::value > >::value , "requires " "True < std::is_reference< T >::value || std::is_object< T >::value || function_types::is_function< T, function_types::non_cv > ::value >" ); }; } } } names
pace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ReferentType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ReferentType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReferentType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ReferentType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ReferentType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/referent_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_REFERENT_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_REFERENT_TYPE_HPP
+
+#include <boost/function_types/is_function.hpp>
+#include <boost/function_types/property_tags.hpp>
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/referent_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ReferentType)( (typename) T )
+, ( requires True
+ < std::is_reference< T >::value
+ || std::is_object< T >::value
+ || function_types::is_function< T, function_types::non_cv >
+ ::value
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_REFERENT_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 28 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Returnable; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implReturnable { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Returnable < T > > { typedef boost_generic_detail_params < T > type; }; template< clas
s, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True < std::is_void< T >::value || ( !( std::is_array< T >::value || std::is_abstract< T >::value ) && std::is_convertible< T&&, T >::value ) > >::type > : ::boost::generic::detail::concept_is_valid < True < std::is_void< T >::value || ( !( std::is_array< T >::value || std::is_abstract< T >::value ) && std::is_convertible< T&&, T >::value ) > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDet
ailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; templa
te< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Returnable; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic
_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Returnable < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Returnable < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , Boo
stGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReturnable ReturnableBoostGenericDetailImpl; template< typename T > class Returnable : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReturnable:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Returnable < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReturnable boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Returnable < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate;
 }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True < std::is_void< T >::value || ( !( std::is_array< T >::value || std::is_abstract< T >::value ) && std::is_convertible< T&&, T >::value ) > >::value , "requires " "True < std::is_void< T >::value || ( !( std::is_array< T >::value || std::is_abstract< T >::value ) && std::is_convertible< T&&, T >::value ) >" ); }; } } } nam
espace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Returnable < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Returnable < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implReturnable type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Returnable < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Returnable < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/returnable.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_RETURNABLE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_RETURNABLE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/returnable.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Returnable)( (typename) T )
+, ( requires True
+ < std::is_void< T >::value
+ || ( !( std::is_array< T >::value
+ || std::is_abstract< T >::value
+ )
+ && std::is_convertible< T&&, T >::value
+ )
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_RETURNABLE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,4 @@
+#line 24 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_CONCEPT macro must be invoked at global scope. " "To make a concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T , typename U > class SameType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implSameType { struct boost_generic_detail_tag { static bool const is_auto_concept = 0 == 1; }; template< typename T , typename U > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T , typename U > struct boost_generic_detail_params_from_concept < SameType < T , U > > { typedef boost_generic_detail_params < T
 , U > type; }; template< class, class, class > struct boost_generic_detail_requires_are_valid_0 : ::boost::mpl::true_ {}; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T , U > , typename ::boost::generic::detail::always_void < >::type > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailCo
nceptMap , boost_generic_detail_params < T , U > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T , U > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map SameType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T , U > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_0< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; templat
e< class BoostGenericDetailConceptMap , typename T , typename U > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , SameType < T , U > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U > type; }; template< typename T , typename U , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < SameType < T , U > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T , U >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_i
mplSameType SameTypeBoostGenericDetailImpl; template< typename T , typename U > class SameType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSameType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < SameType < T , U > > ::boost_generic_concept_map_impl , T , U > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implSameType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < SameType < T , U > > ::boost_generic_concept_map_impl , T , U > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T , U > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; }; typedef typename ::std::conditional < b
oost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; }; } } } namespace boost { namespace generic { namespace detail { template< typename T , typename U > struct is_concept < ::boost:: generic:: std_concept:: SameType < T , U > > : mpl::true_ {}; template< typename T , typename U > struct concept_impl_of < ::boost:: generic:: std_concept:: SameType < T , U > > { static bool const is_specialized = false; static bool const is_auto = 0 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_co
ncept_implSameType type; }; } } }
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "Concept maps must be defined at global scope." ); } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < boost::generic::std_concept::SameType < T, T > >{ static bool const is_auto_concept_definition = false, is_usable = true; struct boost_generic_concept_map_impl { }; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , boost::generic::std_concept::SameType < T, T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/same_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SAME_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SAME_TYPE_HPP
+
+#include <boost/generic/concept.hpp>
+#include <boost/generic/concept_map.hpp>
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/same_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (SameType)( (typename) T, (typename) U )
+)
+
+BOOST_GENERIC_CONCEPT_MAP
+( ( template ( (typename) T ) )
+, (boost::generic::std_concept::SameType)( T, T )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SAME_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 31 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ScalarType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implScalarType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ScalarType < T > > { typedef boost_generic_detail_params < T > type; }; template< clas
s, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < TrivialType< T >, LiteralType< T >, StandardLayoutType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , TrivialType< T >, LiteralType< T >, StandardLayoutType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetai
lOtherTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_scalar< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_scalar< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; templa
te< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < TrivialType< T >, LiteralType< T >, StandardLayoutType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , TrivialType< T >, LiteralType< T >, StandardLayoutType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ScalarType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef bo
ost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ScalarType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generi
c_detail_is_valid_ < ScalarType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implScalarType ScalarTypeBoostGenericDetailImpl; template< typename T > class ScalarType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implScalarType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ScalarType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boo
st_generic_detail_concept_implScalarType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ScalarType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < TrivialType< T >, LiteralType< T >, StandardLayoutType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate par
ent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_scalar< T >::value > >::value , "requires " "True< std::is_scalar< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ScalarType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ScalarType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implScalarType type; }; } } } namespace boost_generic
_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ScalarType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ScalarType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/scalar_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,45 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SCALAR_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SCALAR_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/literal_type.hpp>
+#include <boost/generic/std_concept/support_concepts/trivial_type.hpp>
+#include <boost/generic/std_concept/support_concepts/standard_layout_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/scalar_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ScalarType)( (typename) T )
+, ( public (TrivialType< T >) (LiteralType< T >) (StandardLayoutType< T >) )
+, ( requires True< std::is_scalar< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_SCALAR_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 33 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class StandardLayoutType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implStandardLayoutType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < StandardLayoutType < T > > { typedef boost_generic_detail_params < T >
 type; }; template< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ValueType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_v
oid < True< std::is_standard_layout< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_standard_layout< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typenam
e T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ValueType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map StandardLayoutType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > bo
ost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , StandardLayoutType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < StandardLayoutType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_ma
p < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStandardLayoutType StandardLayoutTypeBoostGenericDetailImpl; template< typename T > class StandardLayoutType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStandardLayoutType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StandardLayoutType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStandardLayoutType boost_generic_detail_conc
ept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < StandardLayoutType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ValueType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_
parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_standard_layout< T >::value > >::value , "requires " "True< std::is_standard_layout< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: StandardLayoutType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: StandardLayoutType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implStandardLayoutType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_m
ap_ < ::boost:: generic:: std_concept:: StandardLayoutType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: StandardLayoutType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/standard_layout_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,47 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_STANDARD_LAYOUT_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_STANDARD_LAYOUT_TYPE_HPP
+
+// ToDo: Make work with intrinsics
+
+// ToDo: Define concept maps for builtin standard layout types
+
+#include <boost/generic/auto_concept.hpp>
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/standard_layout_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (StandardLayoutType)( (typename) T )
+, ( public ValueType< T > )
+, ( requires True< std::is_standard_layout< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_STANDARD_LAYOUT_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 54 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class TrivialType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implTrivialType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < TrivialType < T > > { typedef boost_generic_detail_params < T > type; }; template< c
lass, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ValueType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True< detail::i
s_trivial< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< detail::is_trivial< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_deta
il_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ValueType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ValueType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map TrivialType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::
boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , TrivialType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < TrivialType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generi
c_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrivialType TrivialTypeBoostGenericDetailImpl; template< typename T > class TrivialType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrivialType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TrivialType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrivialType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_co
mpleted_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < TrivialType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ValueType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: do
ing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< detail::is_trivial< T >::value > >::value , "requires " "True< detail::is_trivial< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: TrivialType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: TrivialType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implTrivialType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: TrivialType < T > > { static bool const is_auto_concept_definition = true, is_usable = true;
 struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: TrivialType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/trivial_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,68 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_TRIVIAL_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_TRIVIAL_TYPE_HPP
+
+// ToDo: Make work with intrinsics
+
+// ToDo: Define concept maps for builtin trivial types
+
+#include <boost/generic/auto_concept.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+#include <boost/mpl/or.hpp>
+#include <type_traits>
+
+namespace boost { namespace generic { namespace std_concept { namespace detail {
+
+template< class T >
+struct is_trivial_class : mpl::false_ {};
+
+template< class T >
+struct is_trivial_impl
+ : mpl::or_< std::is_scalar< T >, is_trivial_class< T > > {};
+
+template< class T >
+struct is_trivial
+ : is_trivial_impl
+ < typename std::remove_cv< typename std::remove_all_extents< T >::type >
+ ::type
+ > {};
+
+} } } }
+
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/trivial_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (TrivialType)( (typename) T )
+, ( public ValueType< T > )
+, ( requires True< detail::is_trivial< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_TRIVIAL_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 30 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class Union; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implUnion { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < Union < T > > { typedef boost_generic_detail_params < T > type; }; template< class, class, class
, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ClassType< T >, ValueType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ClassType< T >, ValueType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < T
rue< std::is_union< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_union< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_
detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ClassType< T >, ValueType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ClassType< T >, ValueType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map Union; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_gene
ric_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , Union < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < Union < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap ,
 T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnion UnionBoostGenericDetailImpl; template< typename T > class Union : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnion:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < Union < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnion boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_ma
p < typename ::boost_generic_concept_map_detail::concept_map_ < Union < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ClassType< T >, ValueType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so m
ay form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_union< T >::value > >::value , "requires " "True< std::is_union< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: Union < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: Union < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_concept_impl_detail:: boost_generic_detail_concept_implUnion type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: Union < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {};
 template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: Union < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/union.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_UNION_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_UNION_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/class_type.hpp>
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/union.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (Union)( (typename) T ), ( public (ClassType< T >) (ValueType< T >) )
+, ( requires True< std::is_union< T >::value > )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_UNION_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 31 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class ValueType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implValueType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < ValueType < T > > { typedef boost_generic_detail_params < T > type; }; template< class,
class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ObjectType< T >, VariableType< T >, MemberPointeeType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ObjectType< T >, VariableType< T >, MemberPointeeType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOthe
rTypenames... > , typename ::boost::generic::detail::always_void < True< std::is_object< T >::value && !std::is_abstract< T >::value > >::type > : ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value && !std::is_abstract< T >::value > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std::fa
lse_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ObjectType< T >, VariableType< T >, MemberPointeeType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ObjectType< T >, VariableType< T >, MemberPointeeType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map ValueType; public: private: template< class, class
> friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , ValueType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T ,
 class BoostGenericDetailConceptMap > struct boost_generic_detail_is_valid_ < ValueType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implValueType ValueTypeBoostGenericDetailImpl; template< typename T > class ValueType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implValueType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ValueType < T > > ::boost_generic_concept_map_impl , T
> { typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implValueType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < ValueType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ObjectType< T >, VariableType< T >, MemberPointeeType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asser
ts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True< std::is_object< T >::value && !std::is_abstract< T >::value > >::value , "requires " "True< std::is_object< T >::value && !std::is_abstract< T >::value >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: ValueType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: ValueType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_
generic_concept_impl_detail:: boost_generic_detail_concept_implValueType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: ValueType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: ValueType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/value_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,48 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VALUE_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VALUE_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/member_pointee_type.hpp>
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+#include <boost/generic/std_concept/support_concepts/variable_type.hpp>
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/value_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (ValueType)( (typename) T )
+, ( public (ObjectType< T >) (VariableType< T >) (MemberPointeeType< T >) )
+, ( requires True< std::is_object< T >::value
+ && !std::is_abstract< T >::value
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VALUE_TYPE_HPP

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hei
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hei 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,3 @@
+#line 29 BOOST_PP_STRINGIZE ( BOOST_GENERIC_DETAIL_NARY_CAT ( BOOST_GENERIC_PREPROCESSED_, ROOT, eric/std_ , BOOST_GENERIC_PREPROCESSED_HEADER_NAME, pp ) )
+namespace boost_generic_detail_scope_checker { static_assert ( ::boost_generic_detail_scope_checker::boost_generic_detail_is_same_fun < boost_generic_detail_global_scope_check , ::boost_generic_detail_scope_checker ::boost_generic_detail_global_scope_check >::value , "The BOOST_GENERIC_AUTO_CONCEPT macro must be invoked at global scope. " "To make an auto concept inside a namespace, use a namespace parameter." ); } namespace boost { namespace generic { namespace std_concept { template< typename T > class VariableType; namespace boost_generic_concept_impl_detail { struct boost_generic_detail_concept_implVariableType { struct boost_generic_detail_tag { static bool const is_auto_concept = 1 == 1; }; template< typename T > struct boost_generic_detail_params; template< class BoostGenericDetailConceptAndParams > struct boost_generic_detail_params_from_concept; template< typename T > struct boost_generic_detail_params_from_concept < VariableType < T > > { typedef boost_generic_detail_params < T > type; }; template
< class, class, class, class = void > struct boost_generic_detail_requires_are_valid_0 : ::std::false_type {}; template< class BoostGenericDetailConceptMap , typename T , class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , BoostGenericDetailTypenames , typename ::boost::generic::detail::always_void < ReferentType< T > >::type > : ::boost::generic::detail::concepts_are_modeled < BoostGenericDetailConceptMap , ReferentType< T > > {}; template< class BoostGenericDetailParams, class BoostGenericDetailTypenames , class = void > struct boost_generic_detail_impl_requires_are_valid_1 : ::std::integral_constant< bool, false > {}; template< typename T , class... BoostGenericDetailOtherTypenames > struct boost_generic_detail_impl_requires_are_valid_1 < boost_generic_detail_params < T > , ::boost::generic::detail::type_list < BoostGenericDetailOtherTypenames... > , typename ::boost::generic::detail::always_void < True <
 std::is_reference< T >::value || ( std::is_object< T >::value && !std::is_abstract< T >::value ) > >::type > : ::boost::generic::detail::concept_is_valid < True < std::is_reference< T >::value || ( std::is_object< T >::value && !std::is_abstract< T >::value ) > > {}; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams, class BoostGenericDetailTypenames > struct boost_generic_detail_requires_are_valid_1 : ::boost::mpl::and_ < boost_generic_detail_requires_are_valid_0 < BoostGenericDetailConceptMap , BoostGenericDetailParams, BoostGenericDetailTypenames > , boost_generic_detail_impl_requires_are_valid_1 < BoostGenericDetailParams, BoostGenericDetailTypenames > > {}; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_first_pass { }; template< class, class > struct boost_generic_detail_is_valid_; template< class BoostGenericDetailConceptMap , class BoostGenericDetailParams , class = void > struct boost_generic_detail_parent_concepts { typedef ::std:
:false_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > , typename ::boost::generic::detail::always_void < ReferentType< T > >::type > : virtual boost::generic::detail::completed_concept_map_bases < BoostGenericDetailConceptMap , ReferentType< T > > { typedef ::std::true_type boost_generic_detail_parent_sub_succeeded; }; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map : boost_generic_detail_parent_concepts < BoostGenericDetailConceptMap , boost_generic_detail_params < T > > { private: typedef boost_generic_detail_first_pass < BoostGenericDetailConceptMap , T > boost_generic_detail_typename_deducers; typedef boost_generic_detail_completed_concept_map VariableType; public: private: template< class, class > friend struct boost_generic_detail_is_valid_; typedef boost_generic_detail
_completed_concept_map boost_generic_detail_completed_concept_map_; typedef boost_generic_detail_params < T > boost_generic_detail_params_; typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; public: struct boost_generic_detail_is_valid : ::boost::generic::detail::and_ < typename boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded , boost_generic_detail_requires_are_valid_1< boost_generic_detail_completed_concept_map , boost_generic_detail_params_, boost_generic_detail_typenames > > {}; }; template< class, class > struct boost_generic_detail_completed_concept_map_from_concept; template< class BoostGenericDetailConceptMap , typename T > struct boost_generic_detail_completed_concept_map_from_concept < BoostGenericDetailConceptMap , VariableType < T > > { typedef boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T > type; }; template< typename T , class BoostGenericDetailConceptMap > struct boost_generic_detail_is_vali
d_ < VariableType < T > , BoostGenericDetailConceptMap > : boost_generic_detail_completed_concept_map < BoostGenericDetailConceptMap , T >::boost_generic_detail_is_valid {}; template< class BoostGenericDetailConceptAndParams , class BoostGenericDetailConceptMap = typename ::boost_generic_concept_map_detail::concept_map_ < BoostGenericDetailConceptAndParams > ::boost_generic_concept_map_impl > struct boost_generic_detail_is_valid : boost_generic_detail_is_valid_ < BoostGenericDetailConceptAndParams , BoostGenericDetailConceptMap >::type {}; }; } typedef boost_generic_concept_impl_detail:: boost_generic_detail_concept_implVariableType VariableTypeBoostGenericDetailImpl; template< typename T > class VariableType : boost_generic_concept_impl_detail:: boost_generic_detail_concept_implVariableType:: boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < VariableType < T > > ::boost_generic_concept_map_impl , T > { typedef boost_generic_concept_impl_detail:: boost_g
eneric_detail_concept_implVariableType boost_generic_detail_concept_impl; typedef typename boost_generic_detail_concept_impl::template boost_generic_detail_completed_concept_map < typename ::boost_generic_concept_map_detail::concept_map_ < VariableType < T > > ::boost_generic_concept_map_impl , T > boost_generic_detail_completed_concept_map; typedef boost_generic_detail_concept_impl::boost_generic_detail_params < T > boost_generic_detail_params; struct parent_concept_asserts_substitution_failure { struct instantiate; }; struct parent_concept_asserts { struct instantiate; static_assert ( ::boost::mpl::identity < decltype ( ::boost::generic::detail::instantiate < ReferentType< T > >() ) >::type::value , "This message should never be seen." ); }; typedef typename ::std::conditional < boost_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , parent_concept_asserts , parent_concept_asserts_substitution_failure >::type::instantiate parent_concept_asserts_; static_assert( boost
_generic_detail_completed_concept_map ::boost_generic_detail_parent_sub_succeeded::value , "parameters unable to be substituted into parent concepts " "(guess: doing so may form a reference to void)." ); public: private: typedef ::boost::generic::detail::type_list < void > boost_generic_detail_typenames; static_assert ( ::boost::generic::detail::concept_is_valid < True < std::is_reference< T >::value || ( std::is_object< T >::value && !std::is_abstract< T >::value ) > >::value , "requires " "True < std::is_reference< T >::value || ( std::is_object< T >::value && !std::is_abstract< T >::value ) >" ); }; } } } namespace boost { namespace generic { namespace detail { template< typename T > struct is_concept < ::boost:: generic:: std_concept:: VariableType < T > > : mpl::true_ {}; template< typename T > struct concept_impl_of < ::boost:: generic:: std_concept:: VariableType < T > > { static bool const is_specialized = false; static bool const is_auto = 1 ; typedef ::boost:: generic:: std_concept:: boost_generic_
concept_impl_detail:: boost_generic_detail_concept_implVariableType type; }; } } } namespace boost_generic_concept_map_detail { template< typename T > struct concept_map_ < ::boost:: generic:: std_concept:: VariableType < T > > { static bool const is_auto_concept_definition = true, is_usable = true; struct boost_generic_concept_map_impl {}; template< class BoostGenericDetailDummy = void > struct instantiate { typedef decltype ( ::boost::generic::detail::instantiate_with_dummy < BoostGenericDetailDummy , ::boost:: generic:: std_concept:: VariableType < T > >() ) instantiate_; }; }; }
+#undef BOOST_GENERIC_PREPROCESSED_HEADER_NAME

Added: sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/std_concept/support_concepts/variable_type.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,48 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VARIABLE_TYPE_HPP
+#define BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VARIABLE_TYPE_HPP
+
+#include <boost/generic/auto_concept.hpp>
+
+#ifndef BOOST_GENERIC_GENERATE_PREPROCESSED_HEADERS
+#include <boost/generic/std_concept/concepts/true.hpp>
+#include <boost/generic/std_concept/support_concepts/referent_type.hpp>
+#include <type_traits>
+#endif
+
+#include <boost/generic/detail/std_concept_preprocessing_utilities.hpp>
+
+#define BOOST_GENERIC_PREPROCESSED_HEADER_NAME concept/support_concepts/variable_type.h
+
+#ifdef BOOST_GENERIC_USE_PREPROCESSED_HEADERS
+#include BOOST_GENERIC_PREPROCESSED_HEADER
+#else
+
+#include <boost/generic/detail/preprocess_header_begin.hpp>
+BOOST_GENERIC_CREATE_LINE_DIRECTIVE( __LINE__ )
+
+// [concept.support]
+BOOST_GENERIC_AUTO_CONCEPT
+( ( namespace boost, generic, std_concept )
+, (VariableType)( (typename) T ), ( public ReferentType< T > )
+, ( requires True
+ < std::is_reference< T >::value
+ || ( std::is_object< T >::value
+ && !std::is_abstract< T >::value
+ )
+ >
+ )
+)
+
+#include <boost/generic/detail/preprocess_header_end.hpp>
+
+#endif
+
+#endif // BOOST_GENERIC_STD_CONCEPTS_SUPPORT_CONCEPTS_VARIABLE_TYPE_HPP

Added: sandbox/generic/include/boost/generic/support.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/support.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,78 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_SUPPORT_HPP
+#define BOOST_GENERIC_SUPPORT_HPP
+
+#include <boost/config.hpp>
+
+// ToDo: Remove this, add such a macro to Boost.Config
+// Currently no compilers support this feature
+#ifndef BOOST_NO_LAMBDA_IN_RETURN_TYPE
+#define BOOST_NO_LAMBDA_IN_RETURN_TYPE
+#endif
+
+// The base requirements for BOOST_GENERIC_CONCEPT
+// (should probably add extended SFINAE check as well)
+#if !( defined( BOOST_NO_VARIADIC_MACROS ) )
+
+#include <boost/generic/detail/is_recognized_arg.hpp>
+#include <boost/generic/detail/param_id.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+
+#if 0
+
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_IMPL_UNREC(param_id) 1
+
+// ToDo: Possibly produce error here if not recognized instead of yielding 1
+#define BOOST_NO_BOOST_GENERIC_CONCEPT_PARAM( param_id ) \
+BOOST_PP_IIF( BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( ( param_id ) ) \
+ , BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_IMPL \
+ , BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_IMPL_UNREC \
+ )( param_id )
+
+
+#else
+
+#define BOOST_NO_BOOST_GENERIC_CONCEPT_PARAM( param_id ) \
+BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_IMPL( param_id )
+
+#endif
+
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_IMPL( param_id ) \
+BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_ ## param_id
+
+#define BOOST_GENERIC_DETAIL_SPACED_ID_for for
+#define BOOST_GENERIC_DETAIL_SPACED_ID_for_typedef for typedef
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if if
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if_not if not
+#define BOOST_GENERIC_DETAIL_SPACED_ID_if_typedef if typedef
+#define BOOST_GENERIC_DETAIL_SPACED_ID_typename typename
+#define BOOST_GENERIC_DETAIL_SPACED_ID_public public
+#define BOOST_GENERIC_DETAIL_SPACED_ID_try try
+
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_for 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_for_typedef 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_if 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_if_not 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_if_typedef 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_typename 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_public 0
+#define BOOST_GENERIC_DETAIL_NO_CONCEPT_PARAM_try 0
+
+#else // Else, BOOST_GENERIC_CONCEPT isn't supported
+
+#define BOOST_NO_BOOST_GENERIC_CONCEPT
+
+// Nothing is supported
+#define BOOST_NO_BOOST_GENERIC_CONCEPT_PARAM( arg ) 1
+
+#endif // End BOOST_GENERIC_CONCEPT support check
+
+#endif // BOOST_GENERIC_SUPPORT_HPP

Added: sandbox/generic/include/boost/generic/test.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/test.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1 @@
+here is a bunch of text

Added: sandbox/generic/include/boost/generic/type_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/type_traits.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_TYPE_TRAITS_HPP
+#define BOOST_GENERIC_TYPE_TRAITS_HPP
+
+#include <boost/generic/type_traits/concept_is_modeled_by.hpp>
+#include <boost/generic/type_traits/concept_may_be_modeled_by.hpp>
+#include <boost/generic/type_traits/tag_of.hpp>
+
+#endif // BOOST_GENERIC_TYPE_TRAITS_HPP

Added: sandbox/generic/include/boost/generic/type_traits/archetype_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/type_traits/archetype_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_TYPE_TRAITS_ARCHETYPE_OF_HPP
+#define BOOST_GENERIC_TYPE_TRAITS_ARCHETYPE_OF_HPP
+
+
+
+#endif // BOOST_GENERIC_TYPE_TRAITS_ARCHETYPE_OF_HPP

Added: sandbox/generic/include/boost/generic/type_traits/concept_is_modeled_by.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/type_traits/concept_is_modeled_by.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_TYPE_TRAITS_CONCEPT_IS_MODELED_BY_HPP
+#define BOOST_GENERIC_TYPE_TRAITS_CONCEPT_IS_MODELED_BY_HPP
+
+#include <boost/generic/detail/map_index.hpp>
+#include <boost/generic/detail/piecewise_concept_maps.hpp>
+#include <boost/generic/detail/type_stack.hpp>
+#include <boost/generic/detail/remove_paren.hpp>
+
+// Takes a concept and a set of types
+#define BOOST_GENERIC_CONCEPT_IS_MODELED_BY( concept_in_paren_, ... ) \
+::boost::is_convertible \
+< BOOST_GENERIC_DETAIL_TAG_TYPE_OF( __VA_ARGS__ )* \
+, BOOST_GENERIC_DETAIL_REMOVE_PAREN( concept_in_paren_ )* \
+>
+
+// Takes a concept and a set of types, yields a compile-time constant bool
+#define BOOST_GENERIC_CONCEPT_IS_MODELED_BY_C( concept_in_paren_, ... ) \
+( BOOST_GENERIC_CONCEPT_IS_MODELED_BY( concept_in_paren_, __VA_ARGS__ )::value )
+
+#endif // BOOST_GENERIC_TYPE_TRAITS_CONCEPT_IS_MODELED_BY_HPP

Added: sandbox/generic/include/boost/generic/type_traits/concept_may_be_modeled_by.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/type_traits/concept_may_be_modeled_by.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_TYPE_TRAITS_CONCEPT_MAY_BE_MODELED_BY_HPP
+#define BOOST_GENERIC_TYPE_TRAITS_CONCEPT_MAY_BE_MODELED_BY_HPP
+
+#include <boost/generic/detail/remove_paren.hpp>
+#include <boost/generic/detail/seq_to_seq.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#define BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY( concept_and_params ) \
+::boost::mpl::bool_ \
+< BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY_C( concept_and_params ) >
+
+#define BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY_C( concept_and_params ) \
+BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY_IMPL \
+( BOOST_GENERIC_DETAIL_SEQ_TO_SEQ( concept_and_params ) )
+
+#define BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY_IMPL( seq ) \
+( BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 0, seq ) ) \
+ ::impl \
+ < BOOST_GENERIC_DETAIL_REMOVE_PAREN( BOOST_PP_SEQ_ELEM( 1, seq ) ) > \
+ ::types_are_valid::value \
+)
+
+#endif // BOOST_GENERIC_TYPE_TRAITS_CONCEPT_MAY_BE_MODELED_BY_HPP

Added: sandbox/generic/include/boost/generic/type_traits/tag_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/generic/include/boost/generic/type_traits/tag_of.hpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,22 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_GENERIC_TYPE_TRAITS_TAG_OF_HPP
+#define BOOST_GENERIC_TYPE_TRAITS_TAG_OF_HPP
+
+#include <boost/generic/detail/piecewise_concept_maps.hpp>
+
+// Takes a comma separated list of types, yields a tag object that represents
+// all of the concepts that combination of types models
+#define BOOST_GENERIC_TAG_OF BOOST_GENERIC_DETAIL_TAG_OF
+
+// Takes a comma separated list of types, yields a tag type that represents all
+// of the concepts that combination of types models
+#define BOOST_GENERIC_TAG_TYPE_OF BOOST_GENERIC_DETAIL_TAG_TYPE_OF
+
+#endif // BOOST_GENERIC_TYPE_TRAITS_TAG_OF_HPP

Added: sandbox/generic/project-root.jam
==============================================================================
--- (empty file)
+++ sandbox/generic/project-root.jam 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2011, 2012 Matthew Calabrese
+#
+# Distributed under 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)
+#
+
+path-constant top : . ;
+path-constant sandbox : .. ;
+
+import modules ;
+import path ;
+
+path-constant boost-root : [ modules.peek : BOOST_ROOT ] ;
+path-constant boost-generic-include : $(top)/include ;
+path-constant boost-vmd-include : $(sandbox)/variadic_macro_data ;

Added: sandbox/generic/test/libs/generic/test/Jamfile
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/Jamfile 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,237 @@
+#===============================================================================
+# Copyright (c) 2010 Matt Calabrese
+#
+# 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)
+#===============================================================================
+
+import testing ;
+
+project boost_generic_test
+ : requirements
+ <include>$(boost-generic-include)
+ <include>$(boost-vmd-include)
+ <include>$(boost-root)
+ ;
+
+{
+ test-suite generic :
+
+ [ compile-fail detail/global_scope_fail.cpp : : : : ]
+ [ compile detail/args_to_sequence.cpp : : : : ]
+ [ compile detail/concept_and_params_details.cpp : : : : ]
+ [ compile detail/concept_sig_dets.cpp : : : : ]
+ [ compile detail/function_decl_details.cpp : : : : ]
+ [ compile detail/global_scope_pass.cpp : : : : ]
+ [ compile detail/is_seq_nil.cpp : : : : ]
+ [ compile detail/map_name_param_dets.cpp : : : : ]
+ [ compile detail/mutable_state.cpp : : : : ]
+ [ compile detail/namespace.cpp : : : : ]
+ [ compile detail/num_args.cpp : : : : ]
+ [ compile detail/ordered_iif.cpp : : : : ]
+ [ compile detail/param_list.cpp : : : : ]
+ [ compile detail/public_dets.cpp : : : : ]
+ [ compile detail/seq_details.cpp : : : : ]
+ [ compile detail/template_decl_details.cpp : : : : ]
+ [ compile detail/typename_details.cpp : : : : ]
+
+# [ compile detail/auto_concept_map/arg_details.cpp : : : : ]
+
+ [ compile detail/concept/arg_dets.cpp : : : : ]
+ [ compile detail/concept/req_dets.cpp : : : : ]
+
+ [ compile basic_concept_mapping.cpp : : : : ]
+ [ compile concept.cpp : : : : ]
+
+# [concept.transform]
+ [ compile std_concept/concepts/identity_of.cpp : : : : ]
+ [ compile std_concept/concepts/rvalue_of.cpp : : : : ]
+
+# [concept.true]
+ [ compile std_concept/concepts/true.cpp : : : : ]
+
+# [concept.classify]
+ [ compile std_concept/concepts/lvalue_reference.cpp : : : : ]
+ [ compile std_concept/concepts/rvalue_reference.cpp : : : : ]
+
+# [concept.operator]
+ [ compile std_concept/concepts/has_plus.cpp : : : : ]
+ [ compile std_concept/concepts/has_minus.cpp : : : : ]
+ [ compile std_concept/concepts/has_multiply.cpp : : : : ]
+ [ compile std_concept/concepts/has_divide.cpp : : : : ]
+ [ compile std_concept/concepts/has_modulus.cpp : : : : ]
+ [ compile std_concept/concepts/has_unary_plus.cpp : : : : ]
+ [ compile std_concept/concepts/has_negate.cpp : : : : ]
+ [ compile std_concept/concepts/has_less.cpp : : : : ]
+ [ compile std_concept/concepts/has_greater.cpp : : : : ]
+ [ compile std_concept/concepts/has_less_equal.cpp : : : : ]
+ [ compile std_concept/concepts/has_greater_equal.cpp : : : : ]
+ [ compile std_concept/concepts/has_equal_to.cpp : : : : ]
+ [ compile std_concept/concepts/has_not_equal_to.cpp : : : : ]
+ [ compile std_concept/concepts/has_logical_and.cpp : : : : ]
+ [ compile std_concept/concepts/has_logical_or.cpp : : : : ]
+ [ compile std_concept/concepts/has_logical_not.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_and.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_or.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_xor.cpp : : : : ]
+ [ compile std_concept/concepts/has_complement.cpp : : : : ]
+ [ compile std_concept/concepts/has_left_shift.cpp : : : : ]
+ [ compile std_concept/concepts/has_right_shift.cpp : : : : ]
+ [ compile std_concept/concepts/has_dereference.cpp : : : : ]
+ [ compile std_concept/concepts/has_address_of.cpp : : : : ]
+ [ compile std_concept/concepts/has_subscript.cpp : : : : ]
+ [ compile std_concept/concepts/callable.cpp : : : : ]
+ [ compile std_concept/concepts/has_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_plus_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_minus_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_multiply_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_divide_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_modulus_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_and_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_or_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_bit_xor_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_left_shift_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_right_shift_assign.cpp : : : : ]
+ [ compile std_concept/concepts/has_preincrement.cpp : : : : ]
+ [ compile std_concept/concepts/has_postincrement.cpp : : : : ]
+ [ compile std_concept/concepts/has_predecrement.cpp : : : : ]
+ [ compile std_concept/concepts/has_postdecrement.cpp : : : : ]
+ [ compile std_concept/concepts/has_comma.cpp : : : : ]
+
+# [concept.predicate]
+ [ compile std_concept/concepts/predicate.cpp : : : : ]
+
+# [concept.comparison]
+ [ compile std_concept/concepts/less_than_comparable.cpp : : : : ]
+ [ compile std_concept/concepts/equality_comparable.cpp : : : : ]
+ [ compile std_concept/concepts/strict_weak_order.cpp : : : : ]
+ [ compile std_concept/concepts/equivalence_relation.cpp : : : : ]
+
+# [concept.construct]
+ [ compile std_concept/concepts/has_constructor.cpp : : : : ]
+ [ compile std_concept/concepts/constructible.cpp : : : : ]
+ [ compile std_concept/concepts/default_constructible.cpp : : : : ]
+ [ compile std_concept/concepts/trivially_default_constructible.cpp : : : : ]
+
+# [concept.destruct]
+ [ compile std_concept/concepts/has_destructor.cpp : : : : ]
+ [ compile std_concept/concepts/has_virtual_destructor.cpp : : : : ]
+ [ compile std_concept/concepts/nothrow_destructible.cpp : : : : ]
+ [ compile std_concept/concepts/trivially_destructible.cpp : : : : ]
+
+# [concept.copymove]
+ [ compile std_concept/concepts/move_constructible.cpp : : : : ]
+ [ compile std_concept/concepts/copy_constructible.cpp : : : : ]
+# [ compile std_concept/concepts/trivially_copy_constructible.cpp : : : : ]
+ [ compile std_concept/concepts/move_assignable.cpp : : : : ]
+ [ compile std_concept/concepts/copy_assignable.cpp : : : : ]
+ [ compile std_concept/concepts/trivially_copy_assignable.cpp : : : : ]
+ [ compile std_concept/concepts/has_swap.cpp : : : : ]
+ [ compile std_concept/concepts/swappable.cpp : : : : ]
+
+# [concept.memory]
+ [ compile std_concept/concepts/free_store_allocatable.cpp : : : : ]
+
+# [concept.regular]
+ [ compile std_concept/concepts/semiregular.cpp : : : : ]
+ [ compile std_concept/concepts/regular.cpp : : : : ]
+
+# [concept.convertible]
+ [ compile std_concept/concepts/explicitly_convertible.cpp : : : : ]
+ [ compile std_concept/concepts/convertible.cpp : : : : ]
+
+# [concept.arithmetic]
+ [ compile std_concept/concepts/arithmetic_like.cpp : : : : ]
+ [ compile std_concept/concepts/integral_like.cpp : : : : ]
+ [ compile std_concept/concepts/signed_integral_like.cpp : : : : ]
+ [ compile std_concept/concepts/unsigned_integral_like.cpp : : : : ]
+ [ compile std_concept/concepts/floating_point_like.cpp : : : : ]
+
+# [container.concepts.free]
+ [ compile std_concept/container_concepts/back_emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/back_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/container.cpp : : : : ]
+ [ compile std_concept/container_concepts/emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/front_emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/front_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/queue_like_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/range_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/stack_like_container.cpp : : : : ]
+
+# [container.concepts.member]
+ [ compile std_concept/container_concepts/member_back_emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_back_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_front_emplacement_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_front_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_queue_like_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_range_insertion_container.cpp : : : : ]
+ [ compile std_concept/container_concepts/member_stack_like_container.cpp : : : : ]
+
+# [bidirectional.iterators]
+# [ compile std_concept/iterator_concepts/bidirectional_iterator.cpp : : : : ]
+
+# [forward.iterators]
+# [ compile std_concept/iterator_concepts/forward_iterator.cpp : : : : ]
+
+# [input.iterators]
+# [ compile std_concept/iterator_concepts/input_iterator.cpp : : : : ]
+
+# [iterator.iterators]
+# [ compile std_concept/iterator_concepts/iterator.cpp : : : : ]
+
+# [output.iterators]
+# [ compile std_concept/iterator_concepts/output_iterator.cpp : : : : ]
+
+# [random.access.iterators]
+# [ compile std_concept/iterator_concepts/random_access_iterator.cpp : : : : ]
+
+# [iterator.concepts.range]
+# [ compile std_concept/iterator_concepts/range.cpp : : : : ]
+
+# [shuffle.iterators]
+# [ compile std_concept/iterator_concepts/shuffle_iterator.cpp : : : : ]
+
+# [concept.support]
+ [ compile std_concept/support_concepts/arithmetic_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/class.cpp : : : : ]
+ [ compile std_concept/support_concepts/class_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/derived_from.cpp : : : : ]
+ [ compile std_concept/support_concepts/enumeration_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/floating_point_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/integral_constant_expression_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/integral_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/literal_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/member_pointee_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/non_type_template_parameter_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/object_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/pointee_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/polymorphic_class.cpp : : : : ]
+ [ compile std_concept/support_concepts/referent_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/returnable.cpp : : : : ]
+ [ compile std_concept/support_concepts/same_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/scalar_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/standard_layout_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/trivial_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/union.cpp : : : : ]
+ [ compile std_concept/support_concepts/value_type.cpp : : : : ]
+ [ compile std_concept/support_concepts/variable_type.cpp : : : : ]
+
+# [allocator.element.concepts]
+# [ compile std_concept/memory_concepts/allocatable_element.cpp : : : : ]
+# [ compile std_concept/memory_concepts/constructible_with_allocator.cpp : : : : ]
+# [ compile std_concept/memory_concepts/has_allocator.cpp : : : : ]
+# [ compile std_concept/memory_concepts/uses_allocator.cpp : : : : ]
+
+# [allocator.concepts]
+# [ compile std_concept/memory_concepts/allocator.cpp : : : : ]
+
+# [allocator.concepts.legacy]
+# [ compile std_concept/memory_concepts/legacy_allocator.cpp : : : : ]
+
+ ;
+}

Added: sandbox/generic/test/libs/generic/test/archetype/null_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/archetype/null_archetype.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/archetype/null_archetype.hpp>
+
+//#error Null archetype tests not written.
+
+// ToDo: Write tests...

Added: sandbox/generic/test/libs/generic/test/basic_concept_mapping.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/basic_concept_mapping.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,14 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+//#error Boost.Generic basic concept mapping test unimplemented.
+
+int test_main( int argc, char* argv[] )
+{
+ return 1;
+}

Added: sandbox/generic/test/libs/generic/test/concept.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/concept.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,7 @@
+/*==============================================================================
+ Copyright (c) 2010, 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/

Added: sandbox/generic/test/libs/generic/test/concept_map.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/concept_map.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,69 @@
+/*==============================================================================
+ Copyright (c) 2010, 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/concept_map.hpp>
+
+#if 0
+
+#define FOO_DETS()\
+BOOST_GENERIC_DETAIL_CONCEPT_DETS\
+( (Foo)( (class) A )\
+, ( typename a )\
+, ( typename b )\
+, ( (void)(foo)( (A) c ) )\
+, ( (void)(bar)( (A) c ) )\
+)
+
+#else
+
+#include <utility>
+
+BOOST_GENERIC_CONCEPT_MAP
+( (HasPlus)( int )
+, ( typedef int value_type )
+, ( (value_type)(foo)( (int) lhs, (int) rhs ) )
+)
+
+int main()
+{
+}
+
+#endif
+
+#if 0
+
+#include <boost/generic/ad_hoc_concept.hpp>
+#include <boost/generic/assert/assert_concept_may_be_modeled_by.hpp>
+#include <boost/generic/type_traits/concept_may_be_modeled_by.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+BOOST_GENERIC_AD_HOC_CONCEPT
+( ( TestConcept, ( (class) T, (class) A ) )
+, ( for ( (T) x )
+ ( (A) y )
+ )
+, ( try ( x + y )
+ ( y + x
+ )
+, ( if ( boost::is_same< decltype( x + x ), int > )
+ ( boost::is_same< decltype( y + y ), int > )
+ )
+)
+
+struct a {};
+
+// Passes all conditions, no errors produced
+BOOST_GENERIC_ASSERT_CONCEPT_MAY_BE_MODELED_BY( (TestConcept)( int, int ) )
+
+// Fails on 3 out of the 4 conditions, only failed conditions appear in errors
+BOOST_STATIC_ASSERT
+( !BOOST_GENERIC_CONCEPT_MAY_BE_MODELED_BY_C( (TestConcept)( a, int ) ) );
+
+#endif
+

Added: sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/test/minimal.hpp>
+
+#include <boost/generic/detail/ad_hoc_concept/arg_details.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#define NULL_ARG_DETAILS \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS \
+( ( foo, ( (class) X, (class) Y ) ) )
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( NULL_ARG_DETAILS )
+#error Fatal error with null arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_CONDITIONAL_ARGS( \
+ NULL_ARG_DETAILS )
+#error Conditional args detected with null arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_PUBLIC_CATEGORY( \
+ NULL_ARG_DETAILS )
+#error Public args detected with null arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_CATEGORY( NULL_ARG_DETAILS )
+#error For args detected with null arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_TYPEDEF_CATEGORY( \
+ NULL_ARG_DETAILS )
+#error For typedef args detected with null arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_ERRORS( NULL_ARG_DETAILS )
+#error Errors detected with null arg concept
+#endif
+
+int test_main( int argc, char* argv[] )
+{
+ return 0;
+}

Added: sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details_try.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/arg_details_try.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,46 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/test/minimal.hpp>
+
+#include <boost/generic/detail/ad_hoc_concept/arg_details.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#define TRY_ARG_DETAILS \
+BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETAILS \
+( ( foo, ( (class) X, (class) Y ) ) \
+, ( try ( x() + T() ) ) \
+)
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_FATAL_ERROR( TRY_ARG_DETAILS )
+#error Fatal error with try arg concept
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_CONDITIONAL_ARGS( \
+ TRY_ARG_DETAILS )
+#error No conditional args detected with try arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_PUBLIC_CATEGORY( \
+ TRY_ARG_DETAILS )
+#error Public args detected with try arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_CATEGORY( TRY_ARG_DETAILS )
+#error For args detected with try arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_FOR_TYPEDEF_CATEGORY( \
+ TRY_ARG_DETAILS )
+#error For typedef args detected with try arg concept
+#endif
+
+#if BOOST_GENERIC_DETAIL_AD_HOC_CONCEPT_ARG_DETS_HAS_ERRORS( TRY_ARG_DETAILS )
+#error Errors detected with try arg concept
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/name_param_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/name_param_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,20 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/test/minimal.hpp>
+
+#include <boost/generic/detail/ad_hoc_concept/name_param_details.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+//BOOST_GENERIC_DETAIL_CONCEPT_NAME_PARAM_DETAILS( ( (foo), ( (class) X, (int) Y ) ) )
+
+int test_main( int argc, char* argv[] )
+{
+ return 1;
+}

Added: sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/try_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/ad_hoc_concept/try_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,15 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/is_recognized_arg.hpp>
+
+#if !BOOST_GENERIC_DETAIL_IS_RECOGNIZED_ARG( ( try ( a + b ) ) )
+#error Boost.Generic ad hoc concept "try" parameter is unrecognized.
+#endif
+
+#error Boost.Generic ad hoc concept "try" details tests unimplemented.

Added: sandbox/generic/test/libs/generic/test/detail/args_to_sequence.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/args_to_sequence.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,17 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/args_to_sequence.hpp>
+#include <boost/preprocessor/seq/cat.hpp>
+
+void bar();
+
+void foo()
+{
+ BOOST_PP_SEQ_CAT( BOOST_GENERIC_DETAIL_ARGS_TO_SEQUENCE( b, a, r ) )();
+}

Added: sandbox/generic/test/libs/generic/test/detail/auto_concept_map/arg_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/auto_concept_map/arg_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,59 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/test/minimal.hpp>
+
+#include <boost/generic/detail/auto_concept_map/arg_details.hpp>
+
+#define VALID_TPL ( (class) X )
+#define INVALID_TPL class X
+#define VOID_TPL ( void )
+
+#define INVALID_NAME_PARAM class X
+#define VALID_NAME_PARAM ( some_concept_name )( some, params )
+
+#define VALID_DETS \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS \
+( VALID_TPL, VALID_NAME_PARAM )
+
+#define INVALID_TPL_DETS \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS \
+( INVALID_TPL, VALID_NAME_PARAM )
+
+#define VOID_TPL_DETS \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS \
+( VOID_TPL, VALID_NAME_PARAM )
+
+#define INVALID_NAME_PARAM_DETS \
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETAILS \
+( VALID_TPL, INVALID_NAME_PARAM )
+
+#if BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( VALID_DETS )
+BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_EMIT_ERRORS( VALID_DETS )
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( \
+ INVALID_TPL_DETS )
+#error Auto concept map details considered valid with invalid template params.
+#endif
+
+// ToDo: Fix this test
+#if !BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( \
+ VOID_TPL_DETS )
+#error Auto concept map details considered valid with void template params.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AUTO_CONCEPT_MAP_ARG_DETS_HAS_ERRORS( \
+ INVALID_NAME_PARAM_DETS )
+#error Auto concept map details considered valid with invalid concept/params.
+#endif
+
+int test_main( int argc, char* argv[] )
+{
+ return 0;
+}

Added: sandbox/generic/test/libs/generic/test/detail/axiom_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/axiom_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/axiom_dets.hpp>
+
+#define NOT_AXIOM_DETS \
+BOOST_GENERIC_DETAIL_AXIOM_DETS( not axiom )
+
+#define PAREN_AXIOM_DETS \
+BOOST_GENERIC_DETAIL_AXIOM_DETS( axiom () )
+
+#define EMPTY_AXIOM_DETS \
+BOOST_GENERIC_DETAIL_AXIOM_DETS( axiom )
+
+#define VALID_AXIOM_DETS \
+BOOST_GENERIC_DETAIL_AXIOM_DETS( axiom Stateless( a _1, a _2 ) { _1 == _2; } )
+
+///// NOT_AXIOM_DETS
+#if BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( NOT_AXIOM_DETS )
+#error Nonaxiom detected as a valid axiom.
+#endif
+
+#if BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL( NOT_AXIOM_DETS )
+#error Nonaxiom detected as a partial axiom.
+#endif
+
+///// PAREN_AXIOM_DETS
+#if BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( PAREN_AXIOM_DETS )
+#error Nonaxiom detected as a valid axiom.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL( PAREN_AXIOM_DETS )
+#error Nonaxiom not detected as a partial axiom.
+#endif
+
+///// EMPTY_AXIOM_DETS
+#if BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( EMPTY_AXIOM_DETS )
+#error Empty axiom detected as a valid axiom.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL( EMPTY_AXIOM_DETS )
+#error Empty axiom not detected as a partial axiom.
+#endif
+
+///// VALID_AXIOM_DETS
+#if !BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_VALID( VALID_AXIOM_DETS )
+#error Valid axiom not detected as an axiom.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_AXIOM_DETS_IS_PARTIAL( VALID_AXIOM_DETS )
+#error Valid axiom not detected as a partial axiom.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/concept/arg_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept/arg_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,50 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept/arg_details.hpp>
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+
+#define VALID_EMPTY_BODY \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS( (SameType)( (typename) T, (typename) U ) )
+
+#define VALID_EVERYTHING \
+BOOST_GENERIC_DETAIL_CONCEPT_DETS \
+( (Container)((class) T), ( public Regular< T > ) \
+, ( typename iterator, typename T::iterator ) \
+, ( typename const_iterator, typename T::const_iterator ) \
+, ( typename value_type ) \
+, ( (ObjectType) other_value_type ) \
+, ( (void)(push_back)( (T&) container_, (value_type const&) value_ ), \
+ { \
+ container_.push_back( value_ ); \
+ } \
+ ) \
+, ( typename this(T) size_type ) \
+, ( (iterator)(this(T) begin)() ) \
+, ( (const_iterator)(this(T) begin)() const ) \
+, ( (this(T))() ) \
+, ( explicit (this(T))() ) \
+, ( (this(T) destroy)() ) \
+, ( (operator foo)( (T&) a ) ) \
+, ( explicit (operator bar)( (T&) a ) ) \
+, ( (bool)(operator equal_to)( (T const&) a, (T const&) b ) ) \
+, ( (void*)(this(T) operator new)( (std::size_t) a, (T const&) b ) ) \
+, ( (void)(this(T) operator delete_array)( (void*) a, (T const&) b ) ) \
+, ( axiom something ) \
+)
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_DETS_IS_VALID( VALID_EMPTY_BODY )
+#error Valid concept with empty body not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_DETS_IS_VALID( VALID_EVERYTHING )
+#error Valid complicated concept arguments not considered valid.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/concept/req_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept/req_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,78 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept/req_dets.hpp>
+#include <boost/generic/detail/native_requirement.hpp> // ToDo: Remove
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+
+#define INVALID_TYPENAME_PARAM \
+BOOST_GENERIC_DETAIL_REQ_DETS( ( typename (value_type) ) )
+
+#define VALID_REQ_EMPTY \
+BOOST_GENERIC_DETAIL_REQ_DETS()
+
+#define VALID_TYPENAME_REQ \
+BOOST_GENERIC_DETAIL_REQ_DETS( ( typename value_type, int ) )
+
+#define VALID_TWO_TYPENAME_REQ \
+BOOST_GENERIC_DETAIL_REQ_DETS \
+( ( typename iterator ) \
+, ( typename const_iterator ) \
+)
+
+#define VALID_FUNCTION_REQ \
+BOOST_GENERIC_DETAIL_REQ_DETS( ( (void)(begin)() const, {} ) )
+
+#define VALID_EVERYTHING \
+BOOST_GENERIC_DETAIL_REQ_DETS \
+( ( typename iterator, typename T::iterator ) \
+, ( typename const_iterator, typename T::const_iterator ) \
+, ( typename value_type ) \
+, ( (void)(push_back)( (T&) container_, (value_type const&) value_ ) \
+ , { \
+ container_.push_back( value_ ); \
+ } \
+ ) \
+, ( typename this(T) size_type ) \
+, ( (iterator)(this(T) begin)() ) \
+, ( (const_iterator)(this(T) begin)() const ) \
+, ( requires HasDereference< T > ) \
+, ( (this(T))() ) \
+, ( explicit (this(T))() ) \
+, ( (this(T) destroy)() ) \
+, ( (operator foo)( (T&) a ) ) \
+, ( (T&)(this(T) operator assign)( (T const&) a ) ) \
+, ( explicit (operator bar)( (T&) a ) ) \
+, ( (bool)(operator equal_to)( (T const&) a, (T const&) b ) ) \
+, ( (void*)(this(T) operator new)( (std::size_t) a, (T const&) b ) ) \
+, ( (void)(this(T) operator delete_array)( (void*) a, (T const&) b ) ) \
+, ( axiom something ) \
+)
+
+#if BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( INVALID_TYPENAME_PARAM )
+#error Requirements considered valid with invalid typename param.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( VALID_REQ_EMPTY )
+#error Nested type requirements considered invalid when no requirements are specified.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( VALID_TYPENAME_REQ )
+#error Nested type requirements considered invalid with a typename requirement.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( VALID_FUNCTION_REQ )
+#error Nested type requirements considered invalid with a function requirement.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQ_DETS_IS_VALID( VALID_EVERYTHING )
+#error Nested type requirements considered invalid with a complicated requirements list.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/concept_and_params_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept_and_params_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,78 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept_and_params_details.hpp>
+
+#define BG_EMPTY BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS()
+
+#define BG_NOT_SEQ BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( foo )
+
+#define BG_WRONG_SIZE_SEQ \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( (1)(2)(3) )
+
+#define BG_SEQ_WITH_EXTRA_DATA \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( (1)(2) foo )
+
+#define BG_SEQ_WITH_EMPTY_CONCEPT \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( ()(params) )
+
+#define BG_SEQ_WITH_EMPTY_PARAMS \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( (concept)() )
+
+#define BG_VALID \
+BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS( (concept_)( a(), b(), c() ) )
+
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( BG_EMPTY )
+#error Empty arg detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( BG_NOT_SEQ )
+#error Nonsequence detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( BG_WRONG_SIZE_SEQ )
+#error Wrong size sequence detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( \
+ BG_SEQ_WITH_EXTRA_DATA\
+ )
+#error Sequence with extra data detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( \
+ BG_SEQ_WITH_EMPTY_CONCEPT\
+ )
+#error Sequence with empty concept detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( \
+ BG_SEQ_WITH_EMPTY_PARAMS\
+ )
+#error Sequence with empty params detected as valid concept and params.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_IS_VALID( BG_VALID )
+#error Valid concept and params detected as invalid concept and params.
+#endif
+
+struct a {};
+struct b {};
+struct c {};
+
+struct concept_and_params
+{
+ static void concept_( a, b, c );
+
+ static void caller()
+ {
+ BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_CONCEPT( BG_VALID )
+ ( BOOST_GENERIC_DETAIL_CONCEPT_AND_PARAMS_DETS_PARAMS( BG_VALID ) );
+ }
+};

Added: sandbox/generic/test/libs/generic/test/detail/concept_map/arg_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept_map/arg_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,55 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept_map/arg_dets.hpp>
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+
+#define VALID_EMPTY \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS( (Container)(T) )
+
+#define VALID_EMPTY_WITH_TEMPLATE \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS \
+( ( template ( (class) T ) ), (Container)(T) )
+
+#define VALID_EVERYTHING \
+BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS \
+( (Container)(T) \
+, ( typedef int* iterator ) \
+, ( typedef int const* const_iterator ) \
+, ( typedef int value_type ) \
+, ( (void)(push_back)( (T&) container_, (value_type const&) value_ ), \
+ { \
+ container_.push_back( value_ ); \
+ } \
+ ) \
+, ( (iterator)(this(T) begin)() ) \
+, ( (const_iterator)(this(T) begin)() const ) \
+, ( (this(T))() ) \
+, ( explicit (this(T))() ) \
+, ( (this(T) destroy)() ) \
+, ( (operator foo)( (T&) a ) ) \
+, ( explicit (operator bar)( (T&) a ) ) \
+, ( (bool)(operator equal_to)( (T const&) a, (T const&) b ) ) \
+, ( (void*)(this(T) operator new)( (std::size_t) a, (T const&) b ) ) \
+, ( (void)(this(T) operator delete_array)( (void*) a, (T const&) b ) ) \
+)
+
+#if !BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_IS_VALID( VALID_EMPTY )
+#error Valid empty concept map arguments not considered valid.
+#endif
+
+#if !BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_IS_VALID( VALID_EMPTY_WITH_TEMPLATE )
+#error Valid empty concept map template, arguments not considered valid.
+#endif
+
+#if !BOOST_GENERIC_CONCEPT_MAP_DETAIL_ARG_DETS_IS_VALID( VALID_EVERYTHING )
+#error Valid complicated concept map arguments not considered valid.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/concept_map/body_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept_map/body_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,67 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept_map/body_dets.hpp>
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+
+#define INVALID_TYPEDEF_PARAM \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS( ( typedef (value_type) ) )
+
+#define VALID_TYPEDEF_SPEC \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS( ( typedef int value_type ) )
+
+#define VALID_TWO_TYPEDEF_SPEC \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS \
+( ( typedef int* iterator ) \
+, ( typedef int const* const_iterator ) \
+)
+
+#define VALID_FUNCTION_SPEC \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS( ( (void)(begin)() const, {} ) )
+
+#define VALID_EVERYTHING \
+BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS \
+( ( typedef int* iterator ) \
+, ( typedef int const* const_iterator ) \
+, ( (void)(push_back)( (T&) container_, (value_type const&) value_ ) \
+ , { \
+ container_.push_back( value_ ); \
+ } \
+ ) \
+, ( (iterator)(this(T) begin)() ) \
+, ( (const_iterator)(this(T) begin)() const ) \
+, ( (this(T))() ) \
+, ( explicit (this(T))() ) \
+, ( (this(T) destroy)() ) \
+, ( (operator foo)( (T&) a ) ) \
+, ( (T&)(this(T) operator assign)( (T const&) a ) ) \
+, ( explicit (operator bar)( (T&) a ) ) \
+, ( (bool)(operator equal_to)( (T const&) a, (T const&) b ) ) \
+, ( (void*)(this(T) operator new)( (std::size_t) a, (T const&) b ) ) \
+, ( (void)(this(T) operator delete_array)( (void*) a, (T const&) b ) ) \
+)
+
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( INVALID_TYPEDEF_PARAM )
+#error Body considered valid with invalid an typedef specifier.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( VALID_TYPEDEF_SPEC )
+#error Body considered invalid with a typedef specifier.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( VALID_FUNCTION_SPEC )
+#error Body considered invalid with a function specifier.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_MAP_BODY_DETS_IS_VALID( VALID_EVERYTHING )
+#error Body considered invalid with a complicated specifier list.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/concept_map/typedef_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept_map/typedef_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept_map/typedef_dets.hpp>
+
+#define INVALID_DETS \
+BOOST_GENERIC_DETAIL_TYPEDEF_DETS( int result_type )
+
+#define PARTIAL_DETS \
+BOOST_GENERIC_DETAIL_TYPEDEF_DETS( typedef )
+
+#define VALID_DETS \
+BOOST_GENERIC_DETAIL_TYPEDEF_DETS( typedef int result_type )
+
+#if BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_VALID( INVALID_DETS )
+#error "Invalid typedef considered valid."
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_PARTIAL( INVALID_DETS )
+#error "Invalid typedef considered partial."
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_VALID( PARTIAL_DETS )
+#error "Partial typedef considered valid."
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_PARTIAL( PARTIAL_DETS )
+#error "Partial typedef not considered partial."
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_VALID( VALID_DETS )
+#error "Valid typedef not considered valid."
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPEDEF_DETS_IS_PARTIAL( VALID_DETS )
+#error "Valid typedef not considered partial."
+#endif
+
+struct a
+{
+ BOOST_GENERIC_DETAIL_TYPEDEF_DETS_STATEMENT( VALID_DETS )
+};
+
+a::result_type foo;

Added: sandbox/generic/test/libs/generic/test/detail/concept_sig_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/concept_sig_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,73 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/concept_sig_dets.hpp>
+
+#define BG_EMPTY BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS()
+
+#define BG_NOT_SEQ BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( foo )
+
+#define BG_WRONG_SIZE_SEQ \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( (1)(2)(3) )
+
+#define BG_SEQ_WITH_EXTRA_DATA \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( (1)(2) foo )
+
+#define BG_SEQ_WITH_EMPTY_CONCEPT \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( ()( (class) T) )
+
+#define BG_SEQ_WITH_EMPTY_PARAMS \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS( (concept)() )
+
+#define BG_VALID \
+BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS \
+( (concept_)( (class) A, (class) B, (class) c ) )
+
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( BG_EMPTY )
+#error Empty arg detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( BG_NOT_SEQ )
+#error Nonsequence detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( BG_WRONG_SIZE_SEQ )
+#error Wrong size sequence detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( \
+ BG_SEQ_WITH_EXTRA_DATA\
+ )
+#error Sequence with extra data detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( \
+ BG_SEQ_WITH_EMPTY_CONCEPT\
+ )
+#error Sequence with empty concept detected as valid concept and params.
+#endif
+
+#if BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( \
+ BG_SEQ_WITH_EMPTY_PARAMS\
+ )
+#error Sequence with empty params detected as valid concept and params.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_IS_VALID( BG_VALID )
+#error Valid concept and params detected as invalid concept and params.
+#endif
+
+template< class A, class B, class C >
+class concept_;
+
+// This should be a redeclaration of the above template if everything is correct
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_PARAM_DETS( BG_VALID ) )
+ >
+class BOOST_GENERIC_DETAIL_CONCEPT_SIG_DETS_CONCEPT( BG_VALID );

Added: sandbox/generic/test/libs/generic/test/detail/deduction_result.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/deduction_result.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,51 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/deduction_result.hpp>
+#include <boost/generic/detail/dummy_type.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+using namespace boost::generic::detail;
+using boost::mpl::vector;
+using boost::is_same;
+
+static_assert( is_same< deduction_result< vector<> >::type, no_deduction >::value
+ , "Empty vector doesn't report as no_deduction."
+ );
+
+static_assert( is_same
+ < deduction_result< vector< dummy_type< 0 > > >::type
+ , no_deduction
+ >::value
+ , "Vector with only dummies doesn't report as no_deduction."
+ );
+
+static_assert
+( is_same
+ < deduction_result< vector< dummy_type< 0 >, int, dummy_type< 1 > > >::type
+ , int
+ >::value
+, "Vector with a single deduction doesn't report as that deduction."
+);
+
+static_assert
+( is_same
+ < deduction_result< vector< dummy_type<0>, int, dummy_type<1>, int > >::type
+ , int
+ >::value
+, "Vector with the same deduction twice doesn't report as that deduction."
+);
+
+static_assert
+( is_same
+ < deduction_result< vector< int, dummy_type< 0 >, double > >::type
+ , ambiguous_deduction
+ >::value
+, "Vector with ambiguous deduction doesn't report as ambiguous_deduction."
+);

Added: sandbox/generic/test/libs/generic/test/detail/function_decl_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/function_decl_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,196 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/function_decl_details.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// ToDo: Add tests for incorrect input
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define SIMPL_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS( ( iterator )( begin )() )
+
+#define DECL_WITH_EXTRA_DATA \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS( ( const_iterator )( cbegin )() const )
+
+#define DECL_WITH_DEFINITION \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( swap_float )( (float) a, (float) b ), \
+ { \
+ float const temp = a; \
+ a = b; \
+ b = temp; \
+ } \
+)
+
+#define MEMBER_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( this(T) foo )( (std::size_t) size_ ) )
+
+#define OPERATOR_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( operator plus )( (float) a, (float) b ) )
+
+#define OPERATOR_NONMEMBER_MISMATCH_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( operator new )( (float) a, (float) b ) )
+
+#define OPERATOR_MEMBER_MISMATCH_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( this(T) operator plus )( (float) a, (float) b ) )
+
+#define MEMBER_OPERATOR_DECL \
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS \
+( ( void )( this(T) operator new )( (std::size_t) size_ ) )
+
+////////////
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( MEMBER_DECL )
+#error Associated member function not considered valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( OPERATOR_NONMEMBER_MISMATCH_DECL )
+#error Member operator considered valid nonmember operator.
+#endif
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( OPERATOR_MEMBER_MISMATCH_DECL )
+#error Nonmember operator considered valid member operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( OPERATOR_DECL )
+#error Associated operator not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( MEMBER_OPERATOR_DECL )
+#error Associated member operator not considered valid.
+#endif
+
+////////////
+
+struct iterator {};
+struct const_iterator {};
+struct begin {};
+struct cbegin {};
+struct swap_float {};
+
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( SIMPL_DECL )
+#error Simple function declaration detected as invalid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_ERRORS( SIMPL_DECL )
+#error Simple function declaration detected as having errors.
+#endif
+
+static_assert
+( ( boost::is_same
+ < iterator
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE( SIMPL_DECL )
+ >::value
+ )
+, "Simple function declaration return type is incorrect."
+);
+
+static_assert
+( ( boost::is_same
+ < begin
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME( SIMPL_DECL )
+ >::value
+ )
+, "Simple function declaration name is incorrect."
+);
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION( SIMPL_DECL )
+#error Simple function declaration detected as having a definition.
+#endif
+
+
+
+
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( DECL_WITH_EXTRA_DATA )
+#error Const function declaration detected as invalid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_ERRORS( DECL_WITH_EXTRA_DATA )
+#error Const function declaration detected as having errors.
+#endif
+
+static_assert
+( ( boost::is_same
+ < const_iterator
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE(DECL_WITH_EXTRA_DATA)
+ >::value
+ )
+, "Const function declaration return type is incorrect."
+);
+
+static_assert
+( ( boost::is_same
+ < cbegin
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME(DECL_WITH_EXTRA_DATA)
+ >::value
+ )
+, "Const function declaration name is incorrect."
+);
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION(DECL_WITH_EXTRA_DATA)
+#error Const function declaration detected as having a definition.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_IS_VALID( DECL_WITH_DEFINITION )
+#error Function declaration with definition detected as invalid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_ERRORS( DECL_WITH_DEFINITION )
+#error Function declaration with definition detected as having errors.
+#endif
+
+static_assert
+( ( boost::is_same
+ < void
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_RETURN_TYPE(DECL_WITH_DEFINITION)
+ >::value
+ )
+, "Function declaration with definition return type is incorrect."
+);
+
+static_assert
+( ( boost::is_same
+ < swap_float
+ , BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_NAME(DECL_WITH_DEFINITION)
+ >::value
+ )
+, "Function declaration with definition name is incorrect."
+);
+
+#if! BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_HAS_DEFINITION( \
+ DECL_WITH_DEFINITION )
+#error Function declaration with definition detected as not having a definition.
+#endif
+
+
+#define VALID_VISIT_MACRO( return_type, name_, param_dets, definition ) \
+static_assert( BOOST_GENERIC_DETAIL_IS_EMPTY( definition ) \
+ , "Nonempty definition in visit to function without a definition" \
+ ); \
+static_assert \
+( boost::is_same< void return_type, void( iterator ) > \
+ ::value \
+, "Function return type not deduced correctly." \
+); \
+static_assert \
+( boost::is_same< name_, begin > \
+ ::value \
+, "Function name not deduced correctly." \
+);
+
+// ToDo: Define this macro
+#define INVALID_VISIT_MACRO( ... )
+
+BOOST_GENERIC_DETAIL_FUNCTION_DECL_DETS_VISIT
+( SIMPL_DECL, VALID_VISIT_MACRO, INVALID_VISIT_MACRO )

Added: sandbox/generic/test/libs/generic/test/detail/global_scope_fail.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/global_scope_fail.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+
+namespace foo {
+
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE
+( "Global scope assert working correctly." )
+
+}

Added: sandbox/generic/test/libs/generic/test/detail/global_scope_pass.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/global_scope_pass.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,12 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/assert_at_global_scope.hpp>
+
+BOOST_GENERIC_DETAIL_ASSERT_AT_GLOBAL_SCOPE
+( "Global scope assert not working correctly." )

Added: sandbox/generic/test/libs/generic/test/detail/is_empty.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/is_empty.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/is_empty.hpp>
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY() != 1
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results for no args.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY( _1 ) != 0
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results for 1 arg.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY( _1, _2, _3, _4, _5, _6 ) != 0
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY( () ) != 0
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results for no args.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY( ( _1 ) ) != 0
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results for 1 arg.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_EMPTY( ( _1, _2, _3, _4, _5, _6 ) ) != 0
+#error BOOST_GENERIC_DETAIL_IS_EMPTY does not return proper results.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/is_operator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/is_operator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,45 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/is_operator.hpp>
+
+#if BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME( foo )
+#error "foo" recognized as operator name.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME()
+#error Empty argument recognized as operator name.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME( plus extra stuff )
+#error "plus" with extra stuff recognized as operator name.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME( plus )
+#error "plus" not recognized as operator name.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_IS_OPERATOR_NAME( new )
+#error "new" not recognized as operator name.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME( minus )
+#error "minus" not recognized as member operator name.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME( minus )
+#error "minus" recognized as nonmember operator name.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_IS_MEMBER_OPERATOR_NAME( delete )
+#error "delete" not recognized as member operator name.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_NONMEMBER_OPERATOR_NAME( delete )
+#error "delete" recognized as nonmember operator name.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/is_parenthesized.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/is_parenthesized.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/is_parenthesized.hpp>
+
+#if BOOST_GENERIC_DETAIL_IS_PARENTHESIZED() == 1
+#error Empty arg detected as parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED() == 1
+#error Empty arg detected as starting parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( _1 ) == 1
+#error Unparenthesized 1 arg detected as parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( _1 ) == 1
+#error Unparenthesized 1 arg detected as starting parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( _1, _2, _3 ) == 1
+#error Unparenthesized 3 args detected as parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( _1, _2, _3 ) == 1
+#error Unparenthesized 3 args detected as starting parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( () extra data ) == 1
+#error Parentheses with extra data detected as parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( () extra data ) != 1
+#error Parentheses with extra data detected as not starting parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_PARENTHESIZED( () ) != 1
+#error Parentheses detected as not parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_STARTS_PARENTHESIZED( () ) != 1
+#error Parentheses detected as not starting parenthesized.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/is_seq_nil.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/is_seq_nil.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/is_seq_nil.hpp>
+
+#if BOOST_GENERIC_DETAIL_IS_SEQ_NIL( (foo)(bar) )
+#error Sequence detected as BOOST_PP_SEQ_NIL
+#endif
+
+#if BOOST_GENERIC_DETAIL_IS_SEQ_NIL()
+#error Empty argument detected as BOOST_PP_SEQ_NIL
+#endif
+
+#if !BOOST_GENERIC_DETAIL_IS_SEQ_NIL( BOOST_PP_SEQ_NIL )
+#error BOOST_PP_SEQ_NIL not detected as BOOST_PP_SEQ_NIL
+#endif
+
+// ToDo: Add check for BOOST_PP_SEQ_NIL with data after it

Added: sandbox/generic/test/libs/generic/test/detail/map_name_param_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/map_name_param_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,51 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/map_name_params_details.hpp>
+
+#define UNPARENTHESIZED_INVALID_DETAILS \
+BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS( class X )
+
+#if BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_PARENTHESIZED \
+ ( UNPARENTHESIZED_INVALID_DETAILS )
+
+#error Unparenthesized invalid name and params recognized as parenthesized
+#endif
+
+#if BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_VALID \
+ ( UNPARENTHESIZED_INVALID_DETAILS )
+#error Unparenthesized invalid param list recognized as valid
+#endif
+
+#define PARENTHESIZED_INVALID_DETAILS \
+BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS( ( class X ) )
+
+#if !BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_PARENTHESIZED \
+ ( PARENTHESIZED_INVALID_DETAILS )
+
+#error Parenthesized invalid name and params recognized as not parenthesized
+#endif
+
+#if BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_VALID \
+ ( PARENTHESIZED_INVALID_DETAILS )
+#error Parenthesized invalid param list recognized as valid
+#endif
+
+#define VALID_DETAILS \
+BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS \
+( ( some_concept_name )( some, params) )
+
+#if !BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_VALID \
+ ( VALID_DETAILS )
+#error Valid param list recognized as invalid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_MAP_NAME_PARAMS_DETS_IS_PARENTHESIZED \
+ ( VALID_DETAILS )
+#error Valid param list recognized as unparenthesized
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/mutable_state.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/mutable_state.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,430 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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).
+==============================================================================*/
+
+#include <boost/generic/detail/mutable_state.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/lambda.hpp>
+
+#include <type_traits>
+
+template< class T >
+struct mutable_push_back
+{
+ template< class PreviousState >
+ struct apply : boost::mpl::push_back< PreviousState, T > {};
+};
+
+struct type_list_tag {};
+
+BOOST_GENERIC_DETAIL_INITIALIZE_STATE( type_list_tag, boost::mpl::vector<> )
+
+typedef BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ) empty_list;
+
+static_assert
+( boost::mpl::empty< empty_list >::value
+, "Newly-started type list is not an empty type list."
+);
+
+BOOST_GENERIC_DETAIL_MODIFY_STATE( type_list_tag, mutable_push_back< int > )
+
+typedef BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ) one_element_list;
+
+static_assert
+( boost::mpl::size< one_element_list >::value == 1
+, "Type list size is not correct after one push_back."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< one_element_list, 0 >::type
+ , int
+ >::value
+, "Type list element is not correct after one push_back."
+);
+
+BOOST_GENERIC_DETAIL_MODIFY_STATE( type_list_tag, mutable_push_back< float > )
+
+typedef BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ) two_element_list;
+
+static_assert
+( boost::mpl::size< two_element_list >::value == 2
+, "Type list size is not correct after two push_backs."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< two_element_list, 0 >::type
+ , int
+ >::value
+, "Type list first element is not correct after two push_backs."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< two_element_list, 1 >::type
+ , float
+ >::value
+, "Type list second element is not correct after two push_backs."
+);
+
+BOOST_GENERIC_DETAIL_MODIFY_STATE( type_list_tag, mutable_push_back< char > )
+
+typedef BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ) three_element_list;
+
+static_assert
+( boost::mpl::size< three_element_list >::value == 3
+, "Type list size is not correct after three push_backs."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< three_element_list, 0 >::type
+ , int
+ >::value
+, "Type list first element is not correct after three push_backs."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< three_element_list, 1 >::type
+ , float
+ >::value
+, "Type list second element is not correct after three push_backs."
+);
+
+static_assert
+( std::is_same
+ < boost::mpl::at_c< three_element_list, 2 >::type
+ , char
+ >::value
+, "Type list second element is not correct after three push_backs."
+);
+
+BOOST_GENERIC_DETAIL_SET_STATE( type_list_tag, int )
+
+static_assert
+( std::is_same< BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ), int >::value
+, "State not int after explicit set."
+);
+
+BOOST_GENERIC_DETAIL_SET_STATE( type_list_tag, char )
+
+static_assert
+( std::is_same< BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ), char >::value
+, "State not char after explicit set."
+);
+
+BOOST_GENERIC_DETAIL_MODIFY_STATE
+( type_list_tag, std::add_pointer< boost::mpl::_1 > )
+
+static_assert
+( std::is_same< BOOST_GENERIC_DETAIL_GET_STATE( type_list_tag ), char* >::value
+, "State not char* after add_pointer operation."
+);
+
+template< class = void >
+struct unary_template_detector
+{
+ template< template< class > class UnaryTypeTemplate >
+ static void is_unary_type_template_impl();
+
+#define UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( type ) \
+template< template< type > class UnaryValueTemplate > \
+static type unary_value_template_type_impl();
+
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( bool )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( char )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( unsigned char )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( signed char )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( char16_t )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( char32_t )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( short )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( unsigned short )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( int )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( unsigned )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( long )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( unsigned long )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( long long )
+UNARY_VALUE_TEMPLATE_TYPE_DETECTOR( unsigned long long )
+// TODO do pointer and reference types
+
+};
+
+//( foo )( ((UnaryMetafunction) template( template< class > class ) )
+
+template< class >
+struct unary_type_template;
+
+template< class, class >
+struct binary_type_template;
+
+template< int >
+struct unary_int_template;
+
+template< int, int >
+struct binary_int_template;
+
+template< class > struct always_true : std::true_type {};
+
+#define UNARY_TYPE_TEMPLATE_DETECTOR( name ) \
+template< class Dummy = void, class = void > \
+struct name ## is_unary_type_template_impl : std::false_type {}; \
+ \
+template< class Dummy > \
+struct name ## is_unary_type_template_impl \
+ < Dummy \
+ , typename ::std::enable_if \
+ < always_true \
+ < decltype \
+ ( unary_template_detector< Dummy > \
+ ::template is_unary_type_template_impl< name >() \
+ ) \
+ >::value \
+ >::type \
+ > \
+ : std::true_type {}; \
+ \
+static bool constexpr name ## is_unary_type_template \
+ = name ## is_unary_type_template_impl<>::value;
+
+#define UNARY_VALUE_TEMPLATE_DETECTOR( name ) \
+template< class Dummy = void, class = void > \
+struct name ## is_unary_value_template_impl : std::false_type {}; \
+ \
+template< class Dummy > \
+struct name ## is_unary_value_template_impl \
+ < Dummy \
+ , typename ::std::enable_if \
+ < always_true \
+ < decltype \
+ ( unary_template_detector< Dummy > \
+ ::template unary_value_template_type_impl< name >() \
+ ) \
+ >::value \
+ >::type \
+ > \
+{ \
+ typedef std::true_type type; \
+ typedef decltype \
+ ( unary_template_detector< Dummy > \
+ ::template unary_value_template_type_impl< name >() \
+ ) value_type; \
+}; \
+ \
+static bool constexpr name ## is_unary_value_template \
+ = name ## is_unary_value_template_impl<>::type::value;
+
+UNARY_TYPE_TEMPLATE_DETECTOR( unary_type_template )
+UNARY_TYPE_TEMPLATE_DETECTOR( binary_type_template )
+UNARY_TYPE_TEMPLATE_DETECTOR( unary_int_template )
+UNARY_TYPE_TEMPLATE_DETECTOR( binary_int_template )
+
+UNARY_VALUE_TEMPLATE_DETECTOR( unary_type_template )
+UNARY_VALUE_TEMPLATE_DETECTOR( binary_type_template )
+UNARY_VALUE_TEMPLATE_DETECTOR( unary_int_template )
+UNARY_VALUE_TEMPLATE_DETECTOR( binary_int_template )
+//
+struct left {
+
+ template< class T >
+ static int foo( T );
+
+};
+
+struct right {
+
+ template< class T >
+ static int foo( T* );
+
+};
+
+struct child : left, right
+{
+ using left::foo;
+ using right::foo;
+};
+
+template< class T >
+decltype( child::foo( T() ) ) bloop();
+
+int main()
+{
+ bloop< int* >();
+}
+
+template< class T > struct C {};
+template< class T, class U > struct D : C< T > {};
+template< class T > struct E {};
+
+struct c_info;
+struct d_info;
+struct e_info;
+
+template< class T > struct A {};
+
+template< class T > struct D< A< T >, T > {};
+
+template< class T, class U >
+using C_base = C< T >;
+
+template< class T >
+void foo( C_base< A< T >, T > );
+
+void bar()
+{
+ foo( C< A< int > >() );
+}
+
+#define IS_CONCEPT( name ) \
+
+struct concepts {};
+
+struct concept_info_base
+{
+ void target_concept_info();
+};
+
+BOOST_GENERIC_DETAIL_INITIALIZE_STATE( concepts, concept_info_base )
+
+struct c_concept_info
+ : concept_info_base
+{
+ using concept_info_base::target_concept_info;
+private:
+ template< template< class T > class >
+ struct target_concept_info_impl {};
+
+ enum dummy { dummy_val };
+public:
+ template< template< class T > class Concept >
+ static typename target_concept_info_impl< Concept >::type
+ target_concept_info( dummy = dummy_val );
+};
+
+template<>
+struct c_concept_info::target_concept_info_impl< C >
+{
+ struct type
+ {
+ typedef void void_;
+ typedef std::true_type is_concept;
+ typedef c_info info;
+ };
+};
+
+struct d_concept_info
+ : c_concept_info
+{
+ using c_concept_info::target_concept_info;
+private:
+ template< template< class T, class U > class >
+ struct target_concept_info_impl {};
+
+ enum dummy { dummy_val };
+public:
+ template< template< class T, class U > class Concept >
+ static typename target_concept_info_impl< Concept >::type
+ target_concept_info( dummy = dummy_val );
+};
+
+template<>
+struct d_concept_info::target_concept_info_impl< D >
+{
+ struct type
+ {
+ typedef void void_;
+ typedef std::true_type is_concept;
+ typedef d_info info;
+ };
+};
+
+struct e_concept_info
+ : d_concept_info
+{
+ using d_concept_info::target_concept_info;
+private:
+ template< template< class T > class >
+ struct target_concept_info_impl {};
+
+ enum dummy { dummy_val };
+public:
+ template< template< class T > class Concept >
+ static typename target_concept_info_impl< Concept >::type
+ target_concept_info( dummy = dummy_val );
+};
+
+template<>
+struct e_concept_info::target_concept_info_impl< E >
+{
+ struct type
+ {
+ typedef void void_;
+ typedef std::true_type is_concept;
+ typedef e_info info;
+ };
+};
+
+template< class T > struct no_match;
+
+template< class T, class Dummy >
+struct identity
+{
+ typedef T type;
+};
+
+#define CONCEPT_CHECKER( name )\
+template< class Dummy = void, class = void >\
+struct name ## is_valid\
+{\
+ typedef std::false_type is_concept;\
+};\
+\
+template< class Dummy >\
+struct name ## is_valid< Dummy\
+ , typename decltype\
+ ( identity< e_concept_info, Dummy >::type\
+ ::template target_concept_info< name >()\
+ )::void_\
+ >\
+ : decltype( identity< e_concept_info, Dummy >::type\
+ ::template target_concept_info< name >()\
+ ) {};
+
+CONCEPT_CHECKER( C )
+CONCEPT_CHECKER( D )
+CONCEPT_CHECKER( E )
+CONCEPT_CHECKER( no_match )
+
+void test_get_concept_info()
+{
+ e_concept_info::target_concept_info< C >();
+ e_concept_info::target_concept_info< D >();
+ static_assert( Dis_valid<>::is_concept::value, "C not identified" );
+ static_assert( Dis_valid<>::is_concept::value, "D not identified" );
+ static_assert( Eis_valid<>::is_concept::value, "E not identified" );
+ static_assert( !no_matchis_valid<>::is_concept::value, "no_match incorrectly identified" );
+}
+
+//void foo()
+//{
+// unary_template_detector<>::is_unary_type_template_impl< unary_type_template >();
+//}
+
+static_assert( unary_type_templateis_unary_type_template, "Unary type template not detected" );
+static_assert( !binary_type_templateis_unary_type_template, "Unary type template incorrectly detected" );
+static_assert( !unary_int_templateis_unary_type_template, "Unary type template incorrectly detected" );
+static_assert( !binary_int_templateis_unary_type_template, "Unary type template incorrectly detected" );
+
+static_assert( !unary_type_templateis_unary_value_template, "Unary value template incorrectly detected" );
+static_assert( !binary_type_templateis_unary_value_template, "Unary value template incorrectly detected" );
+static_assert( unary_int_templateis_unary_value_template, "Unary value template not detected" );
+static_assert( !binary_int_templateis_unary_value_template, "Unary value template incorrectly detected" );

Added: sandbox/generic/test/libs/generic/test/detail/namespace.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/namespace.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,156 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/namespace.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#define NOT_PAREN_DETS \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS( not_parenthesized )
+
+#define NOT_NAMESPACE_DETS \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS( ( not_namespace ) )
+
+#define VALID_NAMESPACE_UNNAMED \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS( ( namespace ) )
+
+#define VALID_NAMESPACE_DETS \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS( ( namespace my, namespace_ ) )
+
+#define VALID_ANON_NAMESPACE_DETS \
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS( ( namespace my, other, namespace_, ) )
+
+// NOT_PAREN_DETS tests begin
+#if BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( NOT_PAREN_DETS )
+#error Unparenthesized text recognized as namespace declaration.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( NOT_PAREN_DETS )
+#error Unparenthesized text recognized as parenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( NOT_PAREN_DETS )
+#error Unparenthesized text recognized as namespace declaration.
+#endif
+
+// NOT_NAMESPACE_DETS tests begin
+#if BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( NOT_NAMESPACE_DETS )
+#error Nonnamespace recognized as namespace declaration.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( NOT_NAMESPACE_DETS )
+#error Nonnamespace recognized as unparenthesized.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( NOT_NAMESPACE_DETS )
+#error Nonnamespace recognized as namespace declaration.
+#endif
+
+// VALID_NAMESPACE_UNNAMED tests begin
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( \
+ VALID_NAMESPACE_UNNAMED )
+#error Unnamed namespace without sequence recognized as namespace declaration.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( \
+ VALID_NAMESPACE_UNNAMED )
+#error Namespace without sequence recognized as unparenthesized.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( \
+ VALID_NAMESPACE_UNNAMED )
+#error Namespace without sequence recognized as nonnamespace declaration.
+#endif
+
+// VALID_NAMESPACE_DETS tests begin
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( \
+ VALID_NAMESPACE_DETS )
+#error Valid namespace recognized as not a namespace declaration.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( \
+ VALID_NAMESPACE_DETS )
+#error Valid namespace recognized as unparenthesized.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( \
+ VALID_NAMESPACE_DETS )
+#error Valid namespace recognized as nonnamespace declaration.
+#endif
+
+struct namespace_checker;
+struct anon_namespace_checker;
+
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE( VALID_NAMESPACE_DETS )
+
+struct namespace_checker {};
+
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE( VALID_NAMESPACE_DETS )
+
+namespace my { namespace namespace_ {
+
+// ToDo: Use BOOST_STATIC_ASSERT_MSG
+BOOST_STATIC_ASSERT
+( (!boost::is_same< ::namespace_checker, namespace_checker >::value) );
+
+} }
+
+BOOST_STATIC_ASSERT
+( (!boost::is_same
+ < ::namespace_checker
+ , decltype
+ ( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE
+ ( VALID_NAMESPACE_DETS )
+ namespace_checker()
+ )
+ >::value
+ )
+);
+
+
+// VALID_ANON_NAMESPACE_DETS tests begin
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_VALID( \
+ VALID_ANON_NAMESPACE_DETS )
+#error Valid anonymous namespace recognized as not a namespace declaration.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_PARENTHESIZED( \
+ VALID_ANON_NAMESPACE_DETS )
+#error Valid anonymous namespace recognized as unparenthesized.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NAMESPACE_DETS_IS_NAMESPACE( \
+ VALID_ANON_NAMESPACE_DETS )
+#error Valid anonymous namespace recognized as nonnamespace declaration.
+#endif
+
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_OPEN_NAMESPACE( VALID_ANON_NAMESPACE_DETS )
+
+struct anon_namespace_checker {};
+
+BOOST_GENERIC_DETAIL_NAMESPACE_DETS_CLOSE_NAMESPACE( VALID_ANON_NAMESPACE_DETS )
+
+namespace my { namespace other { namespace namespace_ { namespace {
+
+// ToDo: Use BOOST_STATIC_ASSERT_MSG
+BOOST_STATIC_ASSERT
+( (!boost::is_same< ::anon_namespace_checker,anon_namespace_checker >::value) );
+
+} } } }
+
+BOOST_STATIC_ASSERT
+( (!boost::is_same
+ < ::anon_namespace_checker
+ , decltype
+ ( BOOST_GENERIC_DETAIL_NAMESPACE_DETS_ACCESS_NAMESPACE
+ ( VALID_ANON_NAMESPACE_DETS )
+ anon_namespace_checker()
+ )
+ >::value
+ )
+);

Added: sandbox/generic/test/libs/generic/test/detail/no_return_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/no_return_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,154 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/no_return_dets.hpp>
+
+// ToDo: Add tests for incorrect input
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define CONSTRUCTOR_DECL \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS( ( this(x) )( (int) a ) )
+
+#define EXPLICIT_CONSTRUCTOR_DECL \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS( explicit ( this(x) )( (int) a ) )
+
+#define DESTRUCTOR_DECL \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS( ( this(x) destroy )() )
+
+#define CONVERSION_DECL \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS( ( operator X )( (T const&) a ) )
+
+#define EXPLICIT_CONVERSION_DECL \
+BOOST_GENERIC_DETAIL_NO_RETURN_DETS( explicit ( operator X )( (T const&) a ) )
+
+//////////// CONSTRUCTOR_DECL
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( CONSTRUCTOR_DECL )
+#error Constructor declaration not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( CONSTRUCTOR_DECL )
+#error Constructor declaration not considered partial.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( CONSTRUCTOR_DECL )
+#error Constructor declaration considered explicit.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( CONSTRUCTOR_DECL )
+#error Constructor declaration not considered a constructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( CONSTRUCTOR_DECL )
+#error Constructor declaration considered a destructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( CONSTRUCTOR_DECL )
+#error Constructor declaration considered a conversion.
+#endif
+
+//////////// EXPLICIT_CONSTRUCTOR_DECL
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration not considered partial.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration not considered explicit.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration not considered a constructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration considered a destructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( EXPLICIT_CONSTRUCTOR_DECL )
+#error Explicit constructor declaration considered a conversion.
+#endif
+
+//////////// DESTRUCTOR_DECL
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( DESTRUCTOR_DECL )
+#error Destructor declaration not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( DESTRUCTOR_DECL )
+#error Destructor declaration not considered partial.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( DESTRUCTOR_DECL )
+#error Destructor declaration considered explicit.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( DESTRUCTOR_DECL )
+#error Destructor declaration considered a constructor.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( DESTRUCTOR_DECL )
+#error Destructor declaration not considered a destructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( DESTRUCTOR_DECL )
+#error Destructor declaration considered a conversion.
+#endif
+
+//////////// CONVERSION_DECL
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( CONVERSION_DECL )
+#error Conversion declaration not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( CONVERSION_DECL )
+#error Conversion declaration not considered partial.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( CONVERSION_DECL )
+#error Conversion declaration considered explicit.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( CONVERSION_DECL )
+#error Conversion declaration considered a constructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( CONVERSION_DECL )
+#error Conversion declaration considered a destructor.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( CONVERSION_DECL )
+#error Conversion declaration not considered a conversion.
+#endif
+
+//////////// EXPLICIT_CONVERSION_DECL
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_VALID( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration not considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_PARTIAL( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration not considered partial.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_EXPLICIT( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration not considered explicit.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONSTRUCTOR( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration considered a constructor.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_DESTRUCTOR( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration considered a destructor.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NO_RETURN_DETS_IS_CONVERSION( EXPLICIT_CONVERSION_DECL )
+#error Explicit conversion declaration not considered a conversion.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/num_args.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/num_args.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/num_args.hpp>
+
+#if BOOST_GENERIC_DETAIL_NUM_ARGS() != 0
+#error BOOST_GENERIC_DETAIL_NUM_ARGS does not return proper results for no args.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NUM_ARGS( _1 ) != 1
+#error BOOST_GENERIC_DETAIL_NUM_ARGS does not return proper results for 1 arg.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NUM_ARGS( _1, _2, _3, _4, _5, _6 ) != 6
+#error BOOST_GENERIC_DETAIL_NUM_ARGS does not return proper results.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( () ) != 0
+#error BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS does not return proper results for no args.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( ( _1 ) ) != 1
+#error BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS does not return proper results for 1 arg.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS( ( _1, _2, _3, _4, _5, _6 ) ) != 6
+#error BOOST_GENERIC_DETAIL_NUM_WRAPPED_ARGS does not return proper results.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/operator_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/operator_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,108 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/operator_dets.hpp>
+
+#define NONMEMBER_OPERATOR_NO_OPERATOR \
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( foo )
+
+#define INVALID_NONMEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( operator foo )
+
+#define NONMEMBER_MEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( operator new )
+
+#define VALID_NONMEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS( operator plus )
+
+///// NONMEMBER_OPERATOR_NO_OPERATOR
+#if BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( NONMEMBER_OPERATOR_NO_OPERATOR )
+#error "foo" considered valid nonmember operator.
+#endif
+
+#if BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( NONMEMBER_OPERATOR_NO_OPERATOR )
+#error "foo" considered partial nonmember operator.
+#endif
+
+///// INVALID_NONMEMBER_OPERATOR
+#if BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( INVALID_NONMEMBER_OPERATOR )
+#error Invalid operator considered valid nonmember operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( INVALID_NONMEMBER_OPERATOR )
+#error Invalid operator not considered partial nonmember operator.
+#endif
+
+///// NONMEMBER_MEMBER_OPERATOR
+#if BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( NONMEMBER_MEMBER_OPERATOR )
+#error "operator new" considered valid nonmember operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( NONMEMBER_MEMBER_OPERATOR )
+#error "operator new" not considered partial nonmember operator.
+#endif
+
+///// VALID_NONMEMBER_OPERATOR
+#if !BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_VALID( VALID_NONMEMBER_OPERATOR )
+#error "operator plus" not considered valid nonmember operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_NONMEMBER_OPERATOR_DETS_IS_PARTIAL( VALID_NONMEMBER_OPERATOR )
+#error "operator plus" not considered partial nonmember operator.
+#endif
+
+
+/////
+#define MEMBER_OPERATOR_NO_OPERATOR \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS( foo )
+
+#define INVALID_MEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS( operator foo )
+
+#define MEMBER_NONMEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS( operator plus )
+
+#define VALID_MEMBER_OPERATOR \
+BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS( operator new )
+
+///// MEMBER_OPERATOR_NO_OPERATOR
+#if BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( MEMBER_OPERATOR_NO_OPERATOR )
+#error "foo" considered valid member operator.
+#endif
+
+#if BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( MEMBER_OPERATOR_NO_OPERATOR )
+#error "foo" considered partial member operator.
+#endif
+
+///// INVALID_MEMBER_OPERATOR
+#if BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( INVALID_MEMBER_OPERATOR )
+#error Invalid operator considered valid member operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( INVALID_MEMBER_OPERATOR )
+#error Invalid operator not considered partial member operator.
+#endif
+
+///// MEMBER_NONMEMBER_OPERATOR
+#if BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( MEMBER_NONMEMBER_OPERATOR )
+#error "operator plus" considered valid member operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( MEMBER_NONMEMBER_OPERATOR )
+#error "operator plus" not considered partial member operator.
+#endif
+
+///// VALID_MEMBER_OPERATOR
+#if !BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_VALID( VALID_MEMBER_OPERATOR )
+#error "operator new" not considered valid member operator.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_MEMBER_OPERATOR_DETS_IS_PARTIAL( VALID_MEMBER_OPERATOR )
+#error "operator new" not considered partial member operator.
+#endif
+

Added: sandbox/generic/test/libs/generic/test/detail/ordered_iif.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/ordered_iif.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,92 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/ordered_iif.hpp>
+#include <boost/generic/detail/variadic_identity.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#define TRANSFORM_10( state ) BOOST_PP_ADD( state, 10 )
+#define TRANSFORM_50( state ) BOOST_PP_ADD( state, 50 )
+#define TRANSFORM_100( state ) BOOST_PP_ADD( state, 100 )
+
+#define IS_10( state ) BOOST_PP_EQUAL( state, 10 )
+#define IS_50( state ) BOOST_PP_EQUAL( state, 50 )
+#define IS_100( state ) BOOST_PP_EQUAL( state, 100 )
+
+#define TEN_MAC( state ) BOOST_PP_CAT( ten, state )
+#define FIFTY_MAC( state ) BOOST_PP_CAT( fifty, state )
+#define HUNDRED_MAC( state ) BOOST_PP_CAT( hundred, state )
+
+#define EXPECT_TEN \
+BOOST_GENERIC_DETAIL_ORDERED_IIF \
+( 0 \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( unknown ) \
+, (TRANSFORM_10)(IS_10)(TEN_MAC) \
+, (TRANSFORM_50)(IS_50)(FIFTY_MAC) \
+, (TRANSFORM_100)(IS_100)(HUNDRED_MAC) \
+)
+
+#define EXPECT_FIFTY \
+BOOST_GENERIC_DETAIL_ORDERED_IIF \
+( 40 \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( unknown ) \
+, (TRANSFORM_50)(IS_10)(TEN_MAC) \
+, (TRANSFORM_10)(IS_50)(FIFTY_MAC) \
+, (TRANSFORM_100)(IS_100)(HUNDRED_MAC) \
+)
+
+#define EXPECT_HUNDRED \
+BOOST_GENERIC_DETAIL_ORDERED_IIF \
+( 50 \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( unknown ) \
+, (TRANSFORM_100)(IS_10)(TEN_MAC) \
+, (TRANSFORM_10)(IS_50)(FIFTY_MAC) \
+, (TRANSFORM_50)(IS_100)(HUNDRED_MAC) \
+)
+
+#define EXPECT_UNKNOWN \
+BOOST_GENERIC_DETAIL_ORDERED_IIF \
+( 0 \
+, BOOST_GENERIC_DETAIL_VARIADIC_IDENTITY( unknown ) \
+, (TRANSFORM_100)(IS_10)(TEN_MAC) \
+, (TRANSFORM_10)(IS_50)(FIFTY_MAC) \
+, (TRANSFORM_50)(IS_100)(HUNDRED_MAC) \
+)
+
+struct ten10;
+struct fifty50;
+struct hundred100;
+struct unknown;
+
+static_assert
+( boost::is_same< ten10, EXPECT_TEN >::value
+, "BOOST_GENERIC_DETAIL_ORDERED_IIF expected ten10, got "
+ BOOST_PP_STRINGIZE( EXPECT_TEN )
+);
+
+static_assert
+( boost::is_same< fifty50, EXPECT_FIFTY >::value
+, "BOOST_GENERIC_DETAIL_ORDERED_IIF expected fifty50, got "
+ BOOST_PP_STRINGIZE( EXPECT_FIFTY )
+);
+
+static_assert
+( boost::is_same< hundred100, EXPECT_HUNDRED >::value
+, "BOOST_GENERIC_DETAIL_ORDERED_IIF expected hundred100, got "
+ BOOST_PP_STRINGIZE( EXPECT_HUNDRED )
+);
+
+static_assert
+( boost::is_same< unknown, EXPECT_UNKNOWN >::value
+, "BOOST_GENERIC_DETAIL_ORDERED_IIF expected unknown, got "
+ BOOST_PP_STRINGIZE( EXPECT_UNKNOWN )
+);

Added: sandbox/generic/test/libs/generic/test/detail/param_list.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/param_list.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,408 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/param_list.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#if 0
+
+BOOST_GENERIC_DETAIL_PARAMS( ((0)((class) a), (1)((class) b)) )
+BOOST_GENERIC_DETAIL_ARGS( ((0)((class) a), (1)((class) b)) )
+BOOST_GENERIC_DETAIL_DECLVAL_ARGS( ((0)((class) a), (1)((class) b)) )
+BOOST_GENERIC_DETAIL_FUN_CALL_DECLVAL_ARGS( ((0)((class) a), (1)((class) b)) )
+
+#else
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( class X )
+
+#define PARENTHESIZED_INVALID_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( class X ) )
+
+#define PARTIALLY_VALID_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (class) X, class Y ) )
+
+#define NULLARY_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( () )
+
+#define UNARY_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (class) X ) )
+
+#define NO_PARAM_NAME_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (class) ) )
+
+#define BINARY_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (class) X, (X) Y ) )
+
+#define VARIADIC_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (class,,,) X ) )
+
+#define VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( () const )
+
+#define NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (int) x ) const )
+
+#define DECLVAL_PARAM_LIST \
+BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS( ( (a), (b) ) )
+
+//////////////////
+// Begin Tests //
+//////////////////
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Unparenthesized invalid param list recognized as parenthesized
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Unparenthesized invalid param list recognized as valid
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Unparenthesized invalid param list recognized as valid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Unparenthesized invalid param list recognized as void
+#endif
+//////////
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( PARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+
+#error Parenthesized invalid param list recognized as not parenthesized
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( PARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Parenthesized invalid param list recognized as valid
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( PARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Parenthesized invalid param list recognized as valid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( PARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Parenthesized invalid param list recognized as void
+#endif
+//////////
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( PARTIALLY_VALID_PARAM_LIST_DETAILS )
+
+#error Partially valid param list recognized as not parenthesized
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( PARTIALLY_VALID_PARAM_LIST_DETAILS )
+#error Partially valid param list recognized as valid
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( PARTIALLY_VALID_PARAM_LIST_DETAILS )
+#error Partially valid param list recognized as valid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( PARTIALLY_VALID_PARAM_LIST_DETAILS )
+#error Partially valid param list recognized as void
+#endif
+//////////
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( NULLARY_PARAM_LIST_DETAILS )
+
+#error Nullary param list recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( NULLARY_PARAM_LIST_DETAILS )
+#error Nullary param list recognized as not valid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( NULLARY_PARAM_LIST_DETAILS )
+#error Nullary param list param list recognized as invalid template params
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( NULLARY_PARAM_LIST_DETAILS )
+#error Nullary param list recognized as not void
+#endif
+
+void nullary_function_receiver() {}
+
+void nullary_function
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( NULLARY_PARAM_LIST_DETAILS )
+ ) BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART
+ ( NULLARY_PARAM_LIST_DETAILS )
+{
+ nullary_function_receiver
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS
+ ( NULLARY_PARAM_LIST_DETAILS )
+ );
+}
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( UNARY_PARAM_LIST_DETAILS )
+
+#error Unary param list recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( UNARY_PARAM_LIST_DETAILS )
+#error Unary param list recognized as not valid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( UNARY_PARAM_LIST_DETAILS )
+#error Unary param list param list recognized as invalid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( UNARY_PARAM_LIST_DETAILS )
+#error Unary param list recognized as void
+#endif
+
+template< class T >
+void unary_function_template_receiver() {}
+
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( UNARY_PARAM_LIST_DETAILS )
+ >
+void unary_function_template
+ ( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS
+ ( UNARY_PARAM_LIST_DETAILS )
+ )
+{
+ unary_function_template_receiver
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( UNARY_PARAM_LIST_DETAILS ) >
+ ();
+}
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( NO_PARAM_NAME_PARAM_LIST_DETAILS )
+
+#error Unary param list with no parameter name recognized as not parenthesized.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( NO_PARAM_NAME_PARAM_LIST_DETAILS )
+#error Unary param list with no parameter name recognized as not valid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( NO_PARAM_NAME_PARAM_LIST_DETAILS )
+#error Unary param list param list with no parameter name recognized as invalid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( NO_PARAM_NAME_PARAM_LIST_DETAILS )
+#error Unary param list with no parameter name recognized as void
+#endif
+
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( NO_PARAM_NAME_PARAM_LIST_DETAILS )
+ >
+void no_name_unary_function_template_receiver();
+
+template< class T >
+void no_name_unary_function_template_receiver() {}
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( BINARY_PARAM_LIST_DETAILS )
+
+#error Binary param list incorrectly recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( BINARY_PARAM_LIST_DETAILS )
+#error Binary param list incorrectly recognized as not valid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( BINARY_PARAM_LIST_DETAILS )
+#error Binary param list param list recognized as invalid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( BINARY_PARAM_LIST_DETAILS )
+#error Binary param list incorrectly recognized as void
+#endif
+
+template< class T, int X >
+void binary_function_template_receiver() {}
+
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( BINARY_PARAM_LIST_DETAILS )
+ >
+void binary_function_template()
+{
+ binary_function_template_receiver
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( BINARY_PARAM_LIST_DETAILS ) >
+ ();
+}
+
+
+#if 0
+
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( VARIADIC_PARAM_LIST_DETAILS )
+
+#error Variadic param list incorrectly recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( VARIADIC_PARAM_LIST_DETAILS )
+#error Variadic param list incorrectly recognized as not valid
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( VARIADIC_PARAM_LIST_DETAILS )
+#error Variadic param list param list recognized as invalid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID( VARIADIC_PARAM_LIST_DETAILS )
+#error Variadic param list incorrectly recognized as void
+#endif
+
+template< class... T >
+void variadic_function_template_receiver() {}
+
+template< BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( VARIADIC_PARAM_LIST_DETAILS )
+ >
+void variadic_function_template()
+{
+ binary_function_template_receiver
+ < BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_ARGS( VARIADIC_PARAM_LIST_DETAILS ) >
+ ();
+}
+
+
+
+#endif
+
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+
+#error Void param list with extra data recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Void param list with extra data recognized as not valid
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Void param list with extra data recognized as valid template params
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Void param list with extra data not recognized as void
+#endif
+
+struct success_type {};
+struct failure_type {};
+
+struct void_extra_data_helper
+{
+ void_extra_data_helper() {}
+
+ failure_type foo( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+ );
+
+ success_type foo( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+ ) BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART
+ ( VOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS );
+};
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_PARENTHESIZED \
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+
+#error Nonvoid param list with extra data recognized as not parenthesized
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID \
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Nonvoid param list with extra data recognized as not valid
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VALID_TEMPLATE_PARAMS \
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Nonvoid param list with extra data recognized as valid template params
+#endif
+
+#if BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_IS_VOID \
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+#error Nonvoid param list with extra data recognized as void
+#endif
+
+struct nonvoid_extra_data_helper
+{
+ nonvoid_extra_data_helper() {}
+
+ failure_type foo( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+ );
+
+ success_type foo( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_PARAMS
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS )
+ ) BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_POST_PARAM_LIST_PART
+ ( NONVOID_PARAM_LIST_WITH_EXTRA_DATA_DETAILS );
+};
+
+void testing_function()
+{
+ nullary_function();
+
+ unary_function_template( 0 );
+
+ binary_function_template< int, 0 >();
+
+ void_extra_data_helper const void_extra_data_tester;
+ BOOST_STATIC_ASSERT( (boost::is_same< decltype( void_extra_data_tester.foo() )
+ , success_type
+ >::value
+ )
+ );
+
+ nonvoid_extra_data_helper const nonvoid_extra_data_tester;
+ BOOST_STATIC_ASSERT
+ ( ( boost::is_same< decltype( nonvoid_extra_data_tester.foo( 0 ) )
+ , success_type
+ >::value
+ )
+ );
+}
+
+struct a {};
+struct b {};
+
+void a_b_fun( a, b );
+
+void a_b_test()
+{
+ typedef decltype( a_b_fun( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARGS( DECLVAL_PARAM_LIST ) ) ) foo;
+ typedef decltype( a_b_fun( BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( DECLVAL_PARAM_LIST, 0 )
+ , BOOST_GENERIC_DETAIL_PARAM_LIST_DETAILS_DECLVAL_ARG_I( DECLVAL_PARAM_LIST, 1 )
+ )
+ ) bar;
+}
+
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/public_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/public_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,58 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/public_dets.hpp>
+
+// ToDo: Add tests for incorrect input
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define INVALID_NOT_PUBLIC \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS( foo )
+
+#define PARTIAL_NOT_SEQ \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS( public )
+
+#define VALID_PUBLIC \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS( public foo< T, U > )
+
+#define VALID_PUBLIC_SEQ \
+BOOST_GENERIC_DETAIL_PUBLIC_DETS( public (foo< T, U >) (bar< T, U >) )
+
+#if BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( INVALID_NOT_PUBLIC )
+#error Invalid public argument considered valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( INVALID_NOT_PUBLIC )
+#error Invalid public argument considered partial.
+#endif
+
+#if BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( PARTIAL_NOT_SEQ )
+#error Partial public argument considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( PARTIAL_NOT_SEQ )
+#error Partial public argument considered not partial.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( VALID_PUBLIC )
+#error Valid public argument considered invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( VALID_PUBLIC )
+#error Valid public argument considered not partial.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_VALID( VALID_PUBLIC_SEQ )
+#error Valid public sequence argument considered invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_PUBLIC_DETS_IS_PARTIAL( VALID_PUBLIC_SEQ )
+#error Valid public sequence argument considered not partial.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/requires_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/requires_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,47 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/requires_dets.hpp>
+
+// ToDo: Add tests for incorrect input
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define INVALID_NOT_REQUIRES \
+BOOST_GENERIC_DETAIL_REQUIRES_DETS( foo )
+
+#define PARTIAL_EMPTY_REQS \
+BOOST_GENERIC_DETAIL_REQUIRES_DETS( requires )
+
+#define VALID_REQUIRES \
+BOOST_GENERIC_DETAIL_REQUIRES_DETS( requires CopyConstructible< T > )
+
+#if BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( INVALID_NOT_REQUIRES )
+#error Invalid requires argument considered valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_PARTIAL( INVALID_NOT_REQUIRES )
+#error Invalid requires argument considered partial.
+#endif
+
+#if BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( PARTIAL_EMPTY_REQS )
+#error Partial requires argument considered valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_PARTIAL( PARTIAL_EMPTY_REQS )
+#error Partial requires argument considered not partial.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_VALID( VALID_REQUIRES )
+#error Valid requires argument considered invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_REQUIRES_DETS_IS_PARTIAL( VALID_REQUIRES )
+#error Valid requires argument considered not partial.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/seq_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/seq_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,144 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+// ToDo: Test to make sure that the sequence size and extra data are correct
+
+#include <boost/generic/detail/seq_details.hpp>
+
+#define BG_EMPTY BOOST_GENERIC_DETAIL_SEQ_DETS()
+
+#define BG_NONEMPTY \
+BOOST_GENERIC_DETAIL_SEQ_DETS( something thats not a sequence )
+
+#define BG_SEQ_WITH_EXTRA_DATA \
+BOOST_GENERIC_DETAIL_SEQ_DETS( (0)(1)(2) extra data )
+
+#define BG_SEQ BOOST_GENERIC_DETAIL_SEQ_DETS( (0)(1)(2) )
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( BG_EMPTY )
+#error Empty argument detected as valid sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_EMPTY )
+#error Empty argument detected as having extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITHOUT_EXTRA_DATA( BG_EMPTY )
+#error Empty argument detected as sequence without extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITH_EXTRA_DATA( BG_EMPTY )
+#error Empty argument detected as sequence with extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( BG_EMPTY )
+#error Empty argument detected as starting as a sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_EMPTY )
+#error Empty argument detected as having data after the sequence.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_IS_EMPTY( BG_EMPTY )
+#error Empty argument detected as not empty.
+#endif
+
+
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( BG_NONEMPTY )
+#error Nonempty argument detected as valid sequence.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_NONEMPTY )
+#error Nonempty argument detected as not having extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITHOUT_EXTRA_DATA( BG_NONEMPTY )
+#error Nonempty argument detected as sequence without extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITH_EXTRA_DATA( BG_NONEMPTY )
+#error Nonempty argument detected as sequence with extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( BG_NONEMPTY )
+#error Nonempty argument detected as starting as a sequence.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_NONEMPTY )
+#error Nonempty argument detected as not having data after the sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_EMPTY( BG_NONEMPTY )
+#error Nonempty argument detected as empty.
+#endif
+
+
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( BG_SEQ_WITH_EXTRA_DATA )
+#error Sequence with extra data detected as valid sequence.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_SEQ_WITH_EXTRA_DATA )
+#error Sequence with extra data detected as not having extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITHOUT_EXTRA_DATA( \
+ BG_SEQ_WITH_EXTRA_DATA\
+ )
+#error Sequence with extra data detected as sequence without extra data.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITH_EXTRA_DATA( \
+ BG_SEQ_WITH_EXTRA_DATA\
+ )
+#error Sequence with extra data detected as not sequence with extra data.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( BG_SEQ_WITH_EXTRA_DATA )
+#error Sequence with extra data detected as not starting as a sequence.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_SEQ_WITH_EXTRA_DATA )
+#error Sequence with extra data detected as not having data after the sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_EMPTY( BG_SEQ_WITH_EXTRA_DATA )
+#error Sequence with extra data detected as empty.
+#endif
+
+
+
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_IS_VALID( BG_SEQ )
+#error Sequence detected as not a valid sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_SEQ )
+#error Sequence detected as having extra data.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITHOUT_EXTRA_DATA( BG_SEQ )
+#error Sequence detected as not sequence without extra data.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_SEQ_WITH_EXTRA_DATA( BG_SEQ )
+#error Sequencet detected as sequence with extra data.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_SEQ_DETS_STARTS_AS_SEQ( BG_SEQ )
+#error Sequence detected as not starting as a sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_HAS_EXTRA_DATA( BG_SEQ )
+#error Sequence detected as having data after the sequence.
+#endif
+
+#if BOOST_GENERIC_DETAIL_SEQ_DETS_IS_EMPTY( BG_SEQ )
+#error Sequence detected as empty.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/template_decl_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/template_decl_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,64 @@
+/*==============================================================================
+ Copyright (c) 2010 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/template_decl_details.hpp>
+
+/////////////////////////
+// Prepare Test Inputs //
+/////////////////////////
+#define UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( template ( (class) X ) )
+
+#define PARENTHESIZED_INVALID_TEMPLATE_DECL \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( ( some mistake ( (class) X ) ) )
+
+#define PARENTHESIZED_INVALID_PARAM_LIST_DETAILS \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( ( template ( class X ) ) )
+
+#define INVALID_POST_PARAM_LIST \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS \
+( ( template ( (class) X ) erroneous ) )
+
+#define VALID_TEMPLATE_DECL \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( ( template ( (class) X ) ) )
+
+#define VALID_NULLARY_TEMPLATE_DECL \
+BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETAILS( ( template () ) )
+
+//////////////////
+// Begin Tests //
+//////////////////
+#if BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+UNPARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Unparenthesized template param list recognized as valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+PARENTHESIZED_INVALID_TEMPLATE_DECL )
+#error Parenthesized invalid template declaration recognized as valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+PARENTHESIZED_INVALID_PARAM_LIST_DETAILS )
+#error Parenthesized invalid template param list recognized as valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+INVALID_POST_PARAM_LIST )
+#error Parenthesized template param list with specifiers recognized as valid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+VALID_TEMPLATE_DECL )
+#error Valid template param list recognized as invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TEMPLATE_DECL_DETS_IS_VALID( \
+VALID_NULLARY_TEMPLATE_DECL )
+#error Valid nullary template param list recognized as invalid.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/this_mem_dets.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/this_mem_dets.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,69 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/this_mem_dets.hpp>
+
+#define NOT_THIS_MEM_DETS \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS( not this )
+
+#define NO_PAREN_THIS_MEM_DETS \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS( this no paren )
+
+#define EMPTY_PAREN_THIS_MEM_DETS \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS( this() )
+
+#define VALID_THIS_MEM_DETS_NO_NAME \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS( this(foo) )
+
+#define VALID_THIS_MEM_DETS_WITH_NAME \
+BOOST_GENERIC_DETAIL_THIS_MEM_DETS( this(foo) bar )
+
+///// NOT_THIS_MEM_DETS
+#if BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( NOT_THIS_MEM_DETS )
+#error Not this arg recognized as valid this member argument.
+#endif
+
+#if BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( NOT_THIS_MEM_DETS )
+#error Not this arg recognized as partial this member argument.
+#endif
+
+///// NO_PAREN_THIS_MEM_DETS
+#if BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( NO_PAREN_THIS_MEM_DETS )
+#error This arg without type recognized as valid this member argument.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( NO_PAREN_THIS_MEM_DETS )
+#error This arg without type not recognized as partial this member argument.
+#endif
+
+///// EMPTY_PAREN_THIS_MEM_DETS
+#if BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( EMPTY_PAREN_THIS_MEM_DETS )
+#error This arg with empty type recognized as valid this member argument.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( EMPTY_PAREN_THIS_MEM_DETS )
+#error This arg with empty type not recognized as partial this member argument.
+#endif
+
+///// VALID_THIS_MEM_DETS_NO_NAME
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( VALID_THIS_MEM_DETS_NO_NAME )
+#error This arg without name not recognized as valid this member argument.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( VALID_THIS_MEM_DETS_NO_NAME )
+#error This arg without name not recognized as partial this member argument.
+#endif
+
+///// VALID_THIS_MEM_DETS_WITH_NAME
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_VALID( VALID_THIS_MEM_DETS_WITH_NAME )
+#error This arg with name not recognized as valid this member argument.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_THIS_MEM_DETS_IS_PARTIAL( VALID_THIS_MEM_DETS_WITH_NAME )
+#error This arg with name not recognized as partial this member argument.
+#endif

Added: sandbox/generic/test/libs/generic/test/detail/typename_details.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/detail/typename_details.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,155 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/detail/typename_details.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#define EMPTY_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS()
+
+#define NOT_TYPENAME_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( not_typename name )
+
+#define PARENTHESIZED_NAME_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename (name) )
+
+#define EMPTY_NAME_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename )
+
+#define EMPTY_DEFAULT_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename name, )
+
+#define VALID_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename name )
+
+#define VALID_WITH_DEFAULT_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename name, int )
+
+#define INVALID_NESTED_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename this name, int )
+
+#define NESTED_WITH_DEFAULT_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename this(foo) name, int )
+
+#define VALID_NESTED_DETS \
+BOOST_GENERIC_DETAIL_TYPENAME_DETS( typename this(foo) name )
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( EMPTY_DETS )
+#error Empty arg detected as valid typename requirement.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( NOT_TYPENAME_DETS )
+#error Non-typename detected as valid typename requirement.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( PARENTHESIZED_NAME_DETS )
+#error Typename with parenthesized name detected as valid typename requirement.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( EMPTY_NAME_DETS )
+#error Typename with no name detected as valid typename requirement.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( EMPTY_DEFAULT_DETS )
+#error Typename with empty default detected as valid typename requirement.
+#endif
+
+
+
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( VALID_DETS )
+#error Valid typename requirement detected as invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID_WITHOUT_DEFAULT( VALID_DETS )
+#error Valid typename requirement detected as having a default.
+#endif
+
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( VALID_DETS )
+#error Valid typename requirement without default detected as having default.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( VALID_DETS )
+#error Valid typename requirement without default detected as nested.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( VALID_WITH_DEFAULT_DETS )
+#error Valid typename requirement with default detected as invalid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID_WITHOUT_DEFAULT( VALID_WITH_DEFAULT_DETS )
+#error Valid typename requirement with default detected as not having a default.
+#endif
+
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_HAS_DEFAULT( VALID_WITH_DEFAULT_DETS )
+#error Valid typename requirement with default detected as not having default.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( VALID_WITH_DEFAULT_DETS )
+#error Valid typename requirement with default detected as nested.
+#endif
+
+/////
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( INVALID_NESTED_DETS )
+#error Invalid nested typename requirement detected as valid.
+#endif
+
+#if BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( NESTED_WITH_DEFAULT_DETS )
+#error Nested typename requirement with default detected as invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_VALID( VALID_NESTED_DETS )
+#error Valid nested typename requirement detected as invalid.
+#endif
+
+#if !BOOST_GENERIC_DETAIL_TYPENAME_DETS_IS_NESTED( VALID_NESTED_DETS )
+#error Valid nested typename requirement detected as not nested.
+#endif
+
+struct name {};
+
+static_assert
+( boost::is_same< name, BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( VALID_DETS ) >
+ ::value
+, "typename requirement \"name\" not deduced correctly."
+);
+
+static_assert
+( boost::is_same
+ < name, BOOST_GENERIC_DETAIL_TYPENAME_DETS_NAME( VALID_WITH_DEFAULT_DETS ) >
+ ::value
+, "typename requirement \"name\" not deduced correctly."
+);
+
+static_assert
+( boost::is_same
+ < int
+ , BOOST_GENERIC_DETAIL_TYPENAME_DETS_DEFAULT( VALID_WITH_DEFAULT_DETS )
+ >
+ ::value
+, "typename requirement \"default\" not deduced correctly."
+);
+
+
+#define VALID_VISIT_MACRO( name_, default_ ) \
+static_assert( BOOST_GENERIC_DETAIL_IS_EMPTY( default_ ) \
+ , "Nonempty default parameter in visit without a default" \
+ ); \
+static_assert \
+( boost::is_same< name, name_ > \
+ ::value \
+, "typename requirement \"name\" not deduced correctly." \
+);
+
+// ToDo: Define this macro
+#define INVALID_VISIT_MACRO( ... )
+
+BOOST_GENERIC_DETAIL_TYPENAME_DETS_VISIT
+( VALID_DETS, VALID_VISIT_MACRO, INVALID_VISIT_MACRO )

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/arithmetic_like.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/arithmetic_like.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,69 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/arithmetic_like.hpp>
+#include <boost/generic/assert.hpp>
+
+struct a {};
+
+struct my_type
+{
+ typedef my_type this_t;
+
+ my_type() = default;
+ explicit my_type( long double );
+
+ friend bool operator ==( this_t, this_t );
+ friend bool operator !=( this_t, this_t );
+ friend bool operator <( this_t, this_t );
+ friend bool operator >( this_t, this_t );
+ friend bool operator <=( this_t, this_t );
+ friend bool operator >=( this_t, this_t );
+
+ friend this_t operator +( this_t );
+ friend this_t operator -( this_t );
+
+ friend this_t operator +( this_t, this_t );
+ friend this_t operator -( this_t, this_t );
+ friend this_t operator *( this_t, this_t );
+ friend this_t operator /( this_t, this_t );
+
+ friend this_t& operator ++( this_t );
+ friend this_t operator ++( this_t, int );
+
+ friend this_t& operator --( this_t );
+ friend this_t operator --( this_t, int );
+
+ friend this_t& operator +=( this_t&, this_t );
+ friend this_t& operator -=( this_t&, this_t );
+ friend this_t& operator *=( this_t&, this_t );
+ friend this_t& operator /=( this_t&, this_t );
+};
+
+BOOST_GENERIC_CONCEPT_MAP
+( (boost::generic::std_concept::ArithmeticLike)( my_type ) )
+
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< my_type > );
+
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< float > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< double > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< long double > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< signed char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< long long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< unsigned char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< unsigned short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< unsigned long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::ArithmeticLike< unsigned long long int > );
+
+struct not_arithmetic_like {};
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::ArithmeticLike< not_arithmetic_like > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::ArithmeticLike< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/callable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/callable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,55 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/callable.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {}; struct c {};
+
+struct callable_object
+{
+ void operator ()() const;
+ int operator ()( a const& ) const;
+ float operator ()( a const&, b const& ) const;
+ double operator ()( a const&, b const&, c const& ) const;
+};
+
+using boost::generic::std_concept::Callable;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( Callable< callable_object > );
+BOOST_GENERIC_ASSERT( Callable< callable_object, a > );
+BOOST_GENERIC_ASSERT( Callable< callable_object, a, b > );
+BOOST_GENERIC_ASSERT( Callable< callable_object, a, b, c > );
+
+BOOST_GENERIC_ASSERT( SameType< Callable< callable_object >::result_type, void > );
+BOOST_GENERIC_ASSERT( SameType< Callable< callable_object, a >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< Callable< callable_object, a, b >::result_type, float > );
+BOOST_GENERIC_ASSERT( SameType< Callable< callable_object, a, b, c >::result_type, double > );
+
+BOOST_GENERIC_ASSERT_NOT( Callable< callable_object, b > );
+BOOST_GENERIC_ASSERT_NOT( Callable< callable_object, c > );
+BOOST_GENERIC_ASSERT_NOT( Callable< callable_object, b, a > );
+BOOST_GENERIC_ASSERT_NOT( Callable< callable_object, b, c, a > );
+BOOST_GENERIC_ASSERT_NOT( Callable< callable_object, void > );
+
+BOOST_GENERIC_ASSERT( Callable< int( a ), a > );
+BOOST_GENERIC_ASSERT( SameType< Callable< int( a ), a >::result_type, int > );
+
+BOOST_GENERIC_ASSERT( Callable< int(&)( a ), a > );
+BOOST_GENERIC_ASSERT( SameType< Callable< int(&)( a ), a >::result_type, int > );
+
+BOOST_GENERIC_ASSERT( Callable< int(*)( a ), a > );
+BOOST_GENERIC_ASSERT( SameType< Callable< int(*)( a ), a >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( Callable< void > );
+BOOST_GENERIC_ASSERT_NOT( Callable< void, a > );
+BOOST_GENERIC_ASSERT_NOT( Callable< void, void > );
+BOOST_GENERIC_ASSERT_NOT( Callable< void, void, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/constructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct a {}; struct b {}; struct c {};
+
+struct constructible_type
+{
+ constructible_type();
+ constructible_type( a const& );
+ constructible_type( a const&, b const& );
+ constructible_type( a const&, b const&, c const& );
+};
+
+using boost::generic::std_concept::Constructible;
+
+BOOST_GENERIC_ASSERT( Constructible< constructible_type > );
+BOOST_GENERIC_ASSERT( Constructible< constructible_type, a > );
+BOOST_GENERIC_ASSERT( Constructible< constructible_type, a, b > );
+BOOST_GENERIC_ASSERT( Constructible< constructible_type, a, b, c > );
+
+BOOST_GENERIC_ASSERT_NOT( Constructible< constructible_type, b > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< constructible_type, c > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< constructible_type, b, a > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< constructible_type, b, c, a > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< constructible_type, void > );
+
+BOOST_GENERIC_ASSERT( Constructible< int, int > );
+BOOST_GENERIC_ASSERT( Constructible< int, char > );
+
+BOOST_GENERIC_ASSERT_NOT( Constructible< void > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< void, a > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< void, void > );
+BOOST_GENERIC_ASSERT_NOT( Constructible< void, void, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/convertible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/convertible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,66 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/convertible.hpp>
+
+#include <boost/generic/archetype/null_archetype.hpp>
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::Convertible;
+
+BOOST_GENERIC_ASSERT( Convertible< int, float > );
+
+// TODO see if these should actually pass. I understand why they don't (effectively checks if the const array is convertible to the non-const pointer)
+//BOOST_GENERIC_ASSERT( Convertible< int[1], int* > );
+//BOOST_GENERIC_ASSERT( Convertible< int[], int* > );
+
+// TODO see if this should actually pass. Right now it fails because it effectively checks if int& is implicitly convertible to int&&
+//BOOST_GENERIC_ASSERT( Convertible< int&&, int&& > );
+
+BOOST_GENERIC_ASSERT_NOT( Convertible< int(), int[] > );
+BOOST_GENERIC_ASSERT_NOT( Convertible< int[], int() > );
+
+struct convertible_to_a
+{
+};
+
+struct convertible_from_a
+ : boost::generic::null_archetype
+{
+ operator convertible_to_a() const;
+};
+
+BOOST_GENERIC_ASSERT( Convertible< convertible_from_a, convertible_to_a > );
+BOOST_GENERIC_ASSERT_NOT( Convertible< convertible_to_a, convertible_from_a > );
+
+
+struct only_explicitly_convertible_from_a
+ : boost::generic::null_archetype
+{
+ explicit operator convertible_to_a() const;
+};
+
+BOOST_GENERIC_ASSERT_NOT( Convertible< only_explicitly_convertible_from_a, convertible_to_a > );
+
+struct convertible_from_b
+ : boost::generic::null_archetype
+{
+};
+
+struct convertible_to_b
+{
+ convertible_to_b( convertible_from_b const& );
+};
+
+BOOST_GENERIC_ASSERT( Convertible< convertible_from_b, convertible_to_b > );
+BOOST_GENERIC_ASSERT_NOT( Convertible< convertible_to_b, convertible_from_b > );
+BOOST_GENERIC_ASSERT_NOT( Convertible< void, convertible_from_b > );
+
+// TODO determine if these should succeed or if this is a test failure
+BOOST_GENERIC_ASSERT_NOT( Convertible< convertible_to_b, void > );
+BOOST_GENERIC_ASSERT_NOT( Convertible< void, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_assignable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_assignable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+
+#include <boost/generic/std_concept/concepts/copy_assignable.hpp>
+
+struct noncopy_assignable_type
+{
+ noncopy_assignable_type& operator=( noncopy_assignable_type const& ) = delete;
+};
+
+using boost::generic::std_concept::CopyAssignable;
+
+BOOST_GENERIC_ASSERT( CopyAssignable< int > );
+BOOST_GENERIC_ASSERT( CopyAssignable< int& > );
+
+BOOST_GENERIC_ASSERT_NOT( CopyAssignable< noncopy_assignable_type > );
+BOOST_GENERIC_ASSERT_NOT( CopyAssignable< int() > );
+BOOST_GENERIC_ASSERT_NOT( CopyAssignable< int[] > );
+
+BOOST_GENERIC_ASSERT_NOT( CopyAssignable< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/copy_constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/copy_constructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct noncopy_constructible_type
+{
+ noncopy_constructible_type( noncopy_constructible_type const& )
+ = delete;
+};
+
+using boost::generic::std_concept::CopyConstructible;
+
+BOOST_GENERIC_ASSERT( CopyConstructible< int > );
+BOOST_GENERIC_ASSERT( CopyConstructible< int& > );
+
+BOOST_GENERIC_ASSERT_NOT( CopyConstructible< noncopy_constructible_type > );
+BOOST_GENERIC_ASSERT_NOT( CopyConstructible< int[] > );
+BOOST_GENERIC_ASSERT_NOT( CopyConstructible< int() > );
+BOOST_GENERIC_ASSERT_NOT( CopyConstructible< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/default_constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/default_constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/concepts/default_constructible.hpp>
+
+struct nondefault_constructible_type
+{
+ nondefault_constructible_type() = delete;
+};
+
+using boost::generic::std_concept::DefaultConstructible;
+
+BOOST_GENERIC_ASSERT( DefaultConstructible< int > );
+
+BOOST_GENERIC_ASSERT_NOT( DefaultConstructible< int& > );
+
+BOOST_GENERIC_ASSERT_NOT
+( DefaultConstructible< nondefault_constructible_type > );
+
+BOOST_GENERIC_ASSERT_NOT( DefaultConstructible< int[] > );
+BOOST_GENERIC_ASSERT_NOT( DefaultConstructible< int() > );
+BOOST_GENERIC_ASSERT_NOT( DefaultConstructible< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/equality_comparable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/equality_comparable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/concepts/equality_comparable.hpp>
+
+struct nondefault_equality_comparable
+{
+};
+
+using boost::generic::std_concept::EqualityComparable;
+
+BOOST_GENERIC_ASSERT( EqualityComparable< int > );
+
+BOOST_GENERIC_ASSERT( EqualityComparable< int& > );
+
+BOOST_GENERIC_ASSERT( EqualityComparable< int* > );
+
+BOOST_GENERIC_ASSERT_NOT
+( EqualityComparable< nondefault_equality_comparable > );
+
+
+struct not_equal_isnt_bool_equality_comparable
+{
+ friend bool operator ==( not_equal_isnt_bool_equality_comparable, not_equal_isnt_bool_equality_comparable );
+ friend void operator!=( not_equal_isnt_bool_equality_comparable, not_equal_isnt_bool_equality_comparable );
+};
+
+BOOST_GENERIC_ASSERT_NOT( EqualityComparable< not_equal_isnt_bool_equality_comparable > );
+
+BOOST_GENERIC_ASSERT_NOT( EqualityComparable< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/equivalence_relation.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/equivalence_relation.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,31 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/equivalence_relation.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct a {}; struct b {}; struct c {}; struct d {};
+
+struct equivalence_relation_model_a_b
+{
+ bool operator ()( a, a ) const;
+ bool operator ()( b, b ) const;
+ d operator ()( c, c ) const;
+};
+
+using boost::generic::std_concept::EquivalenceRelation;
+
+BOOST_GENERIC_ASSERT( EquivalenceRelation< equivalence_relation_model_a_b, a > );
+BOOST_GENERIC_ASSERT( EquivalenceRelation< equivalence_relation_model_a_b, b > );
+
+BOOST_GENERIC_ASSERT_NOT( EquivalenceRelation< equivalence_relation_model_a_b, c > );
+BOOST_GENERIC_ASSERT_NOT( EquivalenceRelation< equivalence_relation_model_a_b, d > );
+BOOST_GENERIC_ASSERT_NOT( EquivalenceRelation< equivalence_relation_model_a_b, void > );
+BOOST_GENERIC_ASSERT_NOT( EquivalenceRelation< void, void > );
+BOOST_GENERIC_ASSERT_NOT( EquivalenceRelation< void, a > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/explicitly_convertible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/explicitly_convertible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,69 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+
+#include <boost/generic/std_concept/concepts/explicitly_convertible.hpp>
+
+#include <boost/generic/archetype/null_archetype.hpp>
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ExplicitlyConvertible;
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< int, float > );
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< int[1], int* > );
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< int[], int* > );
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< int*, void* > );
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< void*, int* > );
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< char*, int* > );
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< int&&, int&& > );
+
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< int(), int[] > );
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< int[], int() > );
+
+struct convertible_to_a
+{
+};
+
+struct convertible_from_a
+ : boost::generic::null_archetype
+{
+ operator convertible_to_a() const;
+};
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< convertible_from_a, convertible_to_a > );
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< convertible_to_a, convertible_from_a > );
+
+
+struct only_explicitly_convertible_from_a
+ : boost::generic::null_archetype
+{
+ explicit operator convertible_to_a() const;
+};
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< only_explicitly_convertible_from_a, convertible_to_a > );
+
+struct convertible_from_b
+ : boost::generic::null_archetype
+{
+};
+
+struct convertible_to_b
+{
+ convertible_to_b( convertible_from_b const& );
+};
+
+BOOST_GENERIC_ASSERT( ExplicitlyConvertible< convertible_from_b, convertible_to_b > );
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< convertible_to_b, convertible_from_b > );
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< void, convertible_from_b > );
+
+// TODO determine if these should succeed or if this is a test failure
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< convertible_to_b, void > );
+BOOST_GENERIC_ASSERT_NOT( ExplicitlyConvertible< void, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/floating_point_like.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/floating_point_like.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,22 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/floating_point_like.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::FloatingPointLike;
+
+BOOST_GENERIC_ASSERT( FloatingPointLike< float > );
+BOOST_GENERIC_ASSERT( FloatingPointLike< double > );
+BOOST_GENERIC_ASSERT( FloatingPointLike< long double > );
+
+BOOST_GENERIC_ASSERT_NOT( FloatingPointLike< char > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointLike< int > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointLike< void > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointLike< void() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/free_store_allocatable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/free_store_allocatable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,90 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/free_store_allocatable.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <cstddef>
+
+using boost::generic::std_concept::FreeStoreAllocatable;
+
+struct free_store_allocatable_type {};
+
+BOOST_GENERIC_ASSERT( FreeStoreAllocatable< int > );
+BOOST_GENERIC_ASSERT( FreeStoreAllocatable< float > );
+BOOST_GENERIC_ASSERT( FreeStoreAllocatable< free_store_allocatable_type > );
+
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< void > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< int& > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< int() > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< int[] > );
+
+struct not_free_store_allocatable_type_no_new
+{
+ void* operator new( std::size_t size ) = delete;
+ void* operator new( std::size_t size, std::nothrow_t );
+};
+
+struct not_free_store_allocatable_type_no_new_nothrow
+{
+ void* operator new( std::size_t size );
+ void* operator new( std::size_t size, std::nothrow_t ) = delete;
+};
+
+struct not_free_store_allocatable_type_no_delete
+{
+ void operator delete( void* ) = delete;
+ void operator delete( void*, std::nothrow_t );
+};
+
+struct not_free_store_allocatable_type_no_nothrow_delete
+{
+ void operator delete( void* );
+ void operator delete( void*, std::nothrow_t ) = delete;
+};
+
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< not_free_store_allocatable_type_no_new > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< not_free_store_allocatable_type_no_new_nothrow > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< not_free_store_allocatable_type_no_delete > );
+BOOST_GENERIC_ASSERT_NOT( FreeStoreAllocatable< not_free_store_allocatable_type_no_nothrow_delete > );
+
+//
+//, ( (void*)(this(T) operator new)( (std::size_t) size ) )
+//, ( (void)(this(T) operator delete)( (void*) ) )
+//, ( (void*)(this(T) operator new_array)( (std::size_t) size ), {
+// return T::operator new(size);
+// }
+// )
+//, ( (void)(this(T) operator delete_array)( (void*) ptr ), {
+// return T::operator delete(ptr);
+// }
+// )
+//, ( (void*)(this(T) operator new)( (std::size_t) size, (const std::nothrow_t&) ), {
+// try {
+// return T::operator new(size);
+// } catch(...) {
+// return 0;
+// }
+// }
+// )
+//, ( (void*)(this(T) operator new_array)( (std::size_t) size, (const std::nothrow_t&) ), {
+// try {
+// return T::operator new[](size);
+// } catch(...) {
+// return 0;
+// }
+// }
+// )
+//, ( (void)(this(T) operator delete)( (void*) ptr, (const std::nothrow_t&) ), {
+// T::operator delete(ptr);
+// }
+// )
+//, ( (void)(this(T) operator delete_array)( (void*) ptr, (const std::nothrow_t&) ), {
+// T::operator delete[](ptr);
+// }
+// )

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_address_of.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_address_of.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,45 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_address_of.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct no_address_of_object
+{
+ no_address_of_object* operator&() = delete;
+};
+
+struct a {};
+
+struct overloaded_address_of_object
+{
+ a operator&();
+};
+
+using boost::generic::std_concept::HasAddressOf;
+
+BOOST_GENERIC_ASSERT( HasAddressOf< int > );
+BOOST_GENERIC_ASSERT( HasAddressOf< float > );
+BOOST_GENERIC_ASSERT( HasAddressOf< int() > );
+BOOST_GENERIC_ASSERT( HasAddressOf< int[] > );
+BOOST_GENERIC_ASSERT( HasAddressOf< int[4] > );
+BOOST_GENERIC_ASSERT( HasAddressOf< overloaded_address_of_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasAddressOf< no_address_of_object > );
+BOOST_GENERIC_ASSERT_NOT( HasAddressOf< void > );
+
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< int >::result_type, int* > );
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< float >::result_type, float* > );
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< int() >::result_type, int(*)() > );
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< int[] >::result_type, int (*)[] > );
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< int[4] >::result_type, int(*)[4] > );
+BOOST_GENERIC_ASSERT( SameType< HasAddressOf< overloaded_address_of_object >::result_type, a > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,35 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct assignable_type
+{
+ a operator =( assignable_type ) const;
+ b operator =( a ) const;
+};
+
+using boost::generic::std_concept::HasAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasAssign< assignable_type, assignable_type > );
+BOOST_GENERIC_ASSERT( SameType< HasAssign< assignable_type, assignable_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasAssign< assignable_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasAssign< assignable_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasAssign< assignable_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasAssign< a, b > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_and.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasBitAnd;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitAnd< int, int > );
+BOOST_GENERIC_ASSERT( HasBitAnd< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitAnd< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitAnd< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< double, int* > );
+
+struct has_bitand_object
+{
+ friend void operator &( has_bitand_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasBitAnd< has_bitand_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitAnd< has_bitand_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< int, has_bitand_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAnd< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_and_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_and_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct bit_and_assign_type
+{
+ a operator &=( bit_and_assign_type ) const;
+ b operator &=( a ) const;
+};
+
+using boost::generic::std_concept::HasBitAndAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitAndAssign< bit_and_assign_type, bit_and_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasBitAndAssign< bit_and_assign_type, bit_and_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasBitAndAssign< bit_and_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasBitAndAssign< bit_and_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasBitAndAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitAndAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitAndAssign< bit_and_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAndAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitAndAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_or.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasBitOr;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitOr< int, int > );
+BOOST_GENERIC_ASSERT( HasBitOr< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitOr< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitOr< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< double, int* > );
+
+struct has_bitor_object
+{
+ friend void operator |( has_bitor_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasBitOr< has_bitor_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitOr< has_bitor_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< int, has_bitor_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOr< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_or_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_or_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct bit_or_assign_type
+{
+ a operator |=( bit_or_assign_type ) const;
+ b operator |=( a ) const;
+};
+
+using boost::generic::std_concept::HasBitOrAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitOrAssign< bit_or_assign_type, bit_or_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasBitOrAssign< bit_or_assign_type, bit_or_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasBitOrAssign< bit_or_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasBitOrAssign< bit_or_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasBitOrAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitOrAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitOrAssign< bit_or_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOrAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitOrAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_xor.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasBitXor;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitXor< int, int > );
+BOOST_GENERIC_ASSERT( HasBitXor< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitXor< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitXor< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< double, int* > );
+
+struct has_bitand_object
+{
+ friend void operator ^( has_bitand_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasBitXor< has_bitand_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasBitXor< has_bitand_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< int, has_bitand_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXor< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_bit_xor_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_bit_xor_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct bit_xor_assign_type
+{
+ a operator ^=( bit_xor_assign_type ) const;
+ b operator ^=( a ) const;
+};
+
+using boost::generic::std_concept::HasBitXorAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasBitXorAssign< bit_xor_assign_type, bit_xor_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasBitXorAssign< bit_xor_assign_type, bit_xor_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasBitXorAssign< bit_xor_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasBitXorAssign< bit_xor_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasBitXorAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasBitXorAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasBitXorAssign< bit_xor_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXorAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasBitXorAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_comma.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_comma.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_comma.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasComma;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasComma< int, float > );
+BOOST_GENERIC_ASSERT( SameType< HasComma< int, float >::result_type, float const& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasComma< void, int > );
+BOOST_GENERIC_ASSERT_NOT( HasComma< int, void > );
+BOOST_GENERIC_ASSERT_NOT( HasComma< void, void > );
+
+struct overloaded_comma_type {};
+
+float operator,( overloaded_comma_type, int );
+
+overloaded_comma_type const& operator,( overloaded_comma_type, overloaded_comma_type ) = delete;
+
+BOOST_GENERIC_ASSERT( HasComma< overloaded_comma_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasComma< overloaded_comma_type, int >::result_type, float > );
+
+BOOST_GENERIC_ASSERT( HasComma< int, overloaded_comma_type > );
+BOOST_GENERIC_ASSERT( SameType< HasComma< int, overloaded_comma_type >::result_type, overloaded_comma_type const& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasComma< overloaded_comma_type, overloaded_comma_type > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_complement.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_complement.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,57 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_complement.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasComplement;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasComplement< int > );
+BOOST_GENERIC_ASSERT( HasComplement< long > );
+BOOST_GENERIC_ASSERT( HasComplement< short > );
+BOOST_GENERIC_ASSERT( HasComplement< unsigned > );
+
+BOOST_GENERIC_ASSERT( SameType< HasComplement< int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasComplement< long >::result_type, long > );
+BOOST_GENERIC_ASSERT( SameType< HasComplement< short >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasComplement< unsigned >::result_type, unsigned > );
+
+struct non_complement_object {};
+
+BOOST_GENERIC_ASSERT_NOT( HasComplement< non_complement_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasComplement< float > );
+BOOST_GENERIC_ASSERT_NOT( HasComplement< double > );
+BOOST_GENERIC_ASSERT_NOT( HasComplement< void > );
+
+struct complement_result {};
+
+struct complement_object
+{
+ complement_result operator ~() const;
+};
+
+BOOST_GENERIC_ASSERT( HasComplement< complement_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType
+ < HasComplement< complement_object >::result_type, complement_result >
+);
+
+struct complement_void_object
+{
+ void operator ~() const;
+};
+
+BOOST_GENERIC_ASSERT( HasComplement< complement_void_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType< HasComplement< complement_void_object >::result_type, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_constructor.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_constructor.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,39 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_constructor.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasConstructor;
+
+struct a {}; struct b {}; struct c {};
+
+struct type_with_constructors
+{
+ type_with_constructors( int );
+ type_with_constructors( a );
+ type_with_constructors( a, b );
+ type_with_constructors( a, b, c );
+};
+
+BOOST_GENERIC_ASSERT( HasConstructor< int > );
+BOOST_GENERIC_ASSERT( HasConstructor< int, char > );
+BOOST_GENERIC_ASSERT( HasConstructor< type_with_constructors, int > );
+BOOST_GENERIC_ASSERT( HasConstructor< type_with_constructors, a > );
+BOOST_GENERIC_ASSERT( HasConstructor< type_with_constructors, a, b > );
+BOOST_GENERIC_ASSERT( HasConstructor< type_with_constructors, a, b, c > );
+
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< type_with_constructors > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< type_with_constructors, b > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< type_with_constructors, b, b > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< type_with_constructors, b, c, a > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< void > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< void, int > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasConstructor< int, int, int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_dereference.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_dereference.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,58 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_dereference.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasDereference;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasDereference< int* > );
+BOOST_GENERIC_ASSERT( HasDereference< long* > );
+BOOST_GENERIC_ASSERT( HasDereference< short* > );
+BOOST_GENERIC_ASSERT( HasDereference< unsigned* > );
+
+BOOST_GENERIC_ASSERT( SameType< HasDereference< int* >::result_type, int& > );
+BOOST_GENERIC_ASSERT( SameType< HasDereference< long* >::result_type, long& > );
+BOOST_GENERIC_ASSERT( SameType< HasDereference< short* >::result_type, short& > );
+BOOST_GENERIC_ASSERT( SameType< HasDereference< unsigned* >::result_type, unsigned& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDereference< int > );
+BOOST_GENERIC_ASSERT_NOT( HasDereference< long > );
+BOOST_GENERIC_ASSERT_NOT( HasDereference< short > );
+BOOST_GENERIC_ASSERT_NOT( HasDereference< unsigned > );
+
+struct non_dereference_object {};
+
+BOOST_GENERIC_ASSERT_NOT( HasDereference< non_dereference_object > );
+
+struct dereference_result {};
+
+struct dereference_object
+{
+ dereference_result operator *() const;
+};
+
+BOOST_GENERIC_ASSERT( HasDereference< dereference_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType
+ < HasDereference< dereference_object >::result_type, dereference_result >
+);
+
+struct dereference_void_object
+{
+ void operator *() const;
+};
+
+BOOST_GENERIC_ASSERT( HasDereference< dereference_void_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType< HasDereference< dereference_void_object >::result_type, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_destructor.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_destructor.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/concepts/has_destructor.hpp>
+
+struct no_destructor_type
+{
+ ~no_destructor_type() = delete;
+};
+
+using boost::generic::std_concept::HasDestructor;
+
+BOOST_GENERIC_ASSERT( HasDestructor< int > );
+
+BOOST_GENERIC_ASSERT( HasDestructor< int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDestructor< no_destructor_type > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_divide.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasDivide;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasDivide< int, int > );
+BOOST_GENERIC_ASSERT( HasDivide< short, int > );
+BOOST_GENERIC_ASSERT( HasDivide< int, float > );
+BOOST_GENERIC_ASSERT( HasDivide< double, float > );
+
+BOOST_GENERIC_ASSERT( SameType< HasDivide< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasDivide< short, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasDivide< int, float >::result_type, float > );
+BOOST_GENERIC_ASSERT( SameType< HasDivide< double, float >::result_type, double > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDivide< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasDivide< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasDivide< double, int* > );
+
+struct has_divide_object
+{
+ friend void operator /( has_divide_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasDivide< has_divide_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasDivide< has_divide_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDivide< int, has_divide_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDivide< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasDivide< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasDivide< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_divide_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_divide_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct divide_assign_type
+{
+ a operator /=( divide_assign_type ) const;
+ b operator /=( a ) const;
+};
+
+using boost::generic::std_concept::HasDivideAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasDivideAssign< divide_assign_type, divide_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasDivideAssign< divide_assign_type, divide_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasDivideAssign< divide_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasDivideAssign< divide_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasDivideAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasDivideAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasDivideAssign< float, float > );
+BOOST_GENERIC_ASSERT( SameType< HasDivideAssign< float, float >::result_type, float& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasDivideAssign< divide_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasDivideAssign< a, b > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_equal_to.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_equal_to.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_equal_to.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasEqualTo;
+
+BOOST_GENERIC_ASSERT( HasEqualTo< int, int > );
+
+BOOST_GENERIC_ASSERT( HasEqualTo< float, float > );
+
+struct a {};
+
+struct equal_to_object_left {};
+struct equal_to_object_right {};
+
+bool operator ==( equal_to_object_left, equal_to_object_right );
+
+a operator ==( equal_to_object_right, equal_to_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasEqualTo< equal_to_object_left, equal_to_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasEqualTo< equal_to_object_left, equal_to_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasEqualTo< equal_to_object_right, equal_to_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasEqualTo< equal_to_object_right, equal_to_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasEqualTo< equal_to_object_right, equal_to_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_greater.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasGreater;
+
+BOOST_GENERIC_ASSERT( HasGreater< int, int > );
+
+BOOST_GENERIC_ASSERT( HasGreater< float, float > );
+
+struct a {};
+
+struct greater_object_left {};
+struct greater_object_right {};
+
+bool operator >( greater_object_left, greater_object_right );
+
+a operator >( greater_object_right, greater_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasGreater< greater_object_left, greater_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreater< greater_object_left, greater_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreater< greater_object_right, greater_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreater< greater_object_right, greater_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreater< greater_object_right, greater_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater_equal.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_greater_equal.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_greater_equal.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasGreaterEqual;
+
+BOOST_GENERIC_ASSERT( HasGreaterEqual< int, int > );
+
+BOOST_GENERIC_ASSERT( HasGreaterEqual< float, float > );
+
+struct a {};
+
+struct greater_equal_object_left {};
+struct greater_equal_object_right {};
+
+bool operator >=( greater_equal_object_left, greater_equal_object_right );
+
+a operator >=( greater_equal_object_right, greater_equal_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasGreaterEqual< greater_equal_object_left, greater_equal_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreaterEqual< greater_equal_object_left, greater_equal_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreaterEqual< greater_equal_object_right, greater_equal_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreaterEqual< greater_equal_object_right, greater_equal_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasGreaterEqual< greater_equal_object_right, greater_equal_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_left_shift.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasLeftShift;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasLeftShift< int, int > );
+BOOST_GENERIC_ASSERT( HasLeftShift< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasLeftShift< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasLeftShift< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< double, int* > );
+
+struct has_bitand_object
+{
+ friend void operator <<( has_bitand_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasLeftShift< has_bitand_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasLeftShift< has_bitand_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< int, has_bitand_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShift< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_left_shift_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_left_shift_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct left_shift_assign_type
+{
+ a operator <<=( left_shift_assign_type ) const;
+ b operator <<=( a ) const;
+};
+
+using boost::generic::std_concept::HasLeftShiftAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasLeftShiftAssign< left_shift_assign_type, left_shift_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasLeftShiftAssign< left_shift_assign_type, left_shift_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasLeftShiftAssign< left_shift_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasLeftShiftAssign< left_shift_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasLeftShiftAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasLeftShiftAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasLeftShiftAssign< left_shift_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShiftAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasLeftShiftAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_less.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasLess;
+
+BOOST_GENERIC_ASSERT( HasLess< int, int > );
+
+BOOST_GENERIC_ASSERT( HasLess< float, float > );
+
+struct a {};
+
+struct less_object_left {};
+struct less_object_right {};
+
+bool operator <( less_object_left, less_object_right );
+
+a operator <( less_object_right, less_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasLess< less_object_left, less_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLess< less_object_left, less_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLess< less_object_right, less_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLess< less_object_right, less_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLess< less_object_right, less_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less_equal.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_less_equal.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_less_equal.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasLessEqual;
+
+BOOST_GENERIC_ASSERT( HasLessEqual< int, int > );
+
+BOOST_GENERIC_ASSERT( HasLessEqual< float, float > );
+
+struct a {};
+
+struct less_equal_object_left {};
+struct less_equal_object_right {};
+
+bool operator <=( less_equal_object_left, less_equal_object_right );
+
+a operator <=( less_equal_object_right, less_equal_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasLessEqual< less_equal_object_left, less_equal_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLessEqual< less_equal_object_left, less_equal_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLessEqual< less_equal_object_right, less_equal_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLessEqual< less_equal_object_right, less_equal_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLessEqual< less_equal_object_right, less_equal_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_and.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_and.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_logical_and.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasLogicalAnd;
+
+BOOST_GENERIC_ASSERT( HasLogicalAnd< int, int > );
+
+BOOST_GENERIC_ASSERT( HasLogicalAnd< float, float > );
+
+struct a {};
+
+struct logical_and_object_left {};
+struct logical_and_object_right {};
+
+bool operator &&( logical_and_object_left, logical_and_object_right );
+
+a operator &&( logical_and_object_right, logical_and_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasLogicalAnd< logical_and_object_left, logical_and_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalAnd< logical_and_object_left, logical_and_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalAnd< logical_and_object_right, logical_and_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalAnd< logical_and_object_right, logical_and_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalAnd< logical_and_object_right, logical_and_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_not.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_not.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_logical_not.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasLogicalNot;
+
+BOOST_GENERIC_ASSERT( HasLogicalNot< int > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< long > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< short > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< unsigned > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< float > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< void* > );
+
+struct non_logical_not_object {};
+
+BOOST_GENERIC_ASSERT( HasLogicalNot< void (non_logical_not_object::*)() > );
+BOOST_GENERIC_ASSERT( HasLogicalNot< int (non_logical_not_object::*) > );
+BOOST_GENERIC_ASSERT_NOT( HasLogicalNot< non_logical_not_object > );
+
+struct logical_not_result {};
+
+struct logical_not_object
+{
+ bool operator !() const;
+};
+
+BOOST_GENERIC_ASSERT( HasLogicalNot< logical_not_object > );
+
+struct logical_not_void_object
+{
+ void operator !() const;
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasLogicalNot< logical_not_void_object > );
+BOOST_GENERIC_ASSERT_NOT( HasLogicalNot< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_or.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_logical_or.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_logical_or.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasLogicalOr;
+
+BOOST_GENERIC_ASSERT( HasLogicalOr< int, int > );
+
+BOOST_GENERIC_ASSERT( HasLogicalOr< float, float > );
+
+struct a {};
+
+struct logical_or_object_left {};
+struct logical_or_object_right {};
+
+bool operator ||( logical_or_object_left, logical_or_object_right );
+
+a operator ||( logical_or_object_right, logical_or_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasLogicalOr< logical_or_object_left, logical_or_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalOr< logical_or_object_left, logical_or_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalOr< logical_or_object_right, logical_or_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalOr< logical_or_object_right, logical_or_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasLogicalOr< logical_or_object_right, logical_or_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_minus.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <cstddef>
+
+using boost::generic::std_concept::HasMinus;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasMinus< int, int > );
+BOOST_GENERIC_ASSERT( HasMinus< short, int > );
+BOOST_GENERIC_ASSERT( HasMinus< int, float > );
+BOOST_GENERIC_ASSERT( HasMinus< double, float > );
+BOOST_GENERIC_ASSERT( HasMinus< int*, int > );
+BOOST_GENERIC_ASSERT( HasMinus< int*, int* > );
+
+BOOST_GENERIC_ASSERT( SameType< HasMinus< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMinus< short, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMinus< int, float >::result_type, float > );
+BOOST_GENERIC_ASSERT( SameType< HasMinus< double, float >::result_type, double > );
+BOOST_GENERIC_ASSERT( SameType< HasMinus< int*, int >::result_type, int* > );
+BOOST_GENERIC_ASSERT( SameType< HasMinus< int*, int* >::result_type, std::ptrdiff_t > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMinus< double, int* > );
+
+struct has_minus_object
+{
+ friend void operator -( has_minus_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasMinus< has_minus_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasMinus< has_minus_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMinus< int, has_minus_object > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_minus_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_minus_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct minus_assign_type
+{
+ a operator -=( minus_assign_type ) const;
+ b operator -=( a ) const;
+};
+
+using boost::generic::std_concept::HasMinusAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasMinusAssign< minus_assign_type, minus_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasMinusAssign< minus_assign_type, minus_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasMinusAssign< minus_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasMinusAssign< minus_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasMinusAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMinusAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasMinusAssign< float, float > );
+BOOST_GENERIC_ASSERT( SameType< HasMinusAssign< float, float >::result_type, float& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMinusAssign< minus_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasMinusAssign< a, b > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_modulus.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasModulus;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasModulus< int, int > );
+BOOST_GENERIC_ASSERT( HasModulus< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasModulus< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasModulus< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasModulus< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< double, int* > );
+
+struct has_modulus_object
+{
+ friend void operator %( has_modulus_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasModulus< has_modulus_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasModulus< has_modulus_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasModulus< int, has_modulus_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasModulus< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasModulus< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_modulus_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_modulus_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct modulus_assign_type
+{
+ a operator %=( modulus_assign_type ) const;
+ b operator %=( a ) const;
+};
+
+using boost::generic::std_concept::HasModulusAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasModulusAssign< modulus_assign_type, modulus_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasModulusAssign< modulus_assign_type, modulus_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasModulusAssign< modulus_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasModulusAssign< modulus_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasModulusAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasModulusAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasModulusAssign< modulus_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasModulusAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasModulusAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_multiply.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasMultiply;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasMultiply< int, int > );
+BOOST_GENERIC_ASSERT( HasMultiply< short, int > );
+BOOST_GENERIC_ASSERT( HasMultiply< int, float > );
+BOOST_GENERIC_ASSERT( HasMultiply< double, float > );
+
+BOOST_GENERIC_ASSERT( SameType< HasMultiply< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiply< short, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiply< int, float >::result_type, float > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiply< double, float >::result_type, double > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< double, int* > );
+
+struct has_multiply_object
+{
+ friend void operator *( has_multiply_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasMultiply< has_multiply_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasMultiply< has_multiply_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< int, has_multiply_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasMultiply< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_multiply_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_multiply_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct multiply_assign_type
+{
+ a operator *=( multiply_assign_type ) const;
+ b operator *=( a ) const;
+};
+
+using boost::generic::std_concept::HasMultiplyAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasMultiplyAssign< multiply_assign_type, multiply_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiplyAssign< multiply_assign_type, multiply_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasMultiplyAssign< multiply_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiplyAssign< multiply_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasMultiplyAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiplyAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasMultiplyAssign< float, float > );
+BOOST_GENERIC_ASSERT( SameType< HasMultiplyAssign< float, float >::result_type, float& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasMultiplyAssign< multiply_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasMultiplyAssign< a, b > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_negate.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_negate.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,54 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_negate.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasNegate;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasNegate< int > );
+BOOST_GENERIC_ASSERT( HasNegate< long > );
+BOOST_GENERIC_ASSERT( HasNegate< short > );
+BOOST_GENERIC_ASSERT( HasNegate< unsigned > );
+
+BOOST_GENERIC_ASSERT( SameType< HasNegate< int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasNegate< long >::result_type, long > );
+BOOST_GENERIC_ASSERT( SameType< HasNegate< short >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasNegate< unsigned >::result_type, unsigned > );
+
+struct non_negate_object {};
+
+BOOST_GENERIC_ASSERT_NOT( HasNegate< non_negate_object > );
+
+struct negate_result {};
+
+struct negate_object
+{
+ negate_result operator -() const;
+};
+
+BOOST_GENERIC_ASSERT( HasNegate< negate_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType
+ < HasNegate< negate_object >::result_type, negate_result >
+);
+
+struct negate_void_object
+{
+ void operator -() const;
+};
+
+BOOST_GENERIC_ASSERT( HasNegate< negate_void_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType< HasNegate< negate_void_object >::result_type, void > );
+

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_not_equal_to.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_not_equal_to.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,41 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_not_equal_to.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::HasNotEqualTo;
+
+BOOST_GENERIC_ASSERT( HasNotEqualTo< int, int > );
+
+BOOST_GENERIC_ASSERT( HasNotEqualTo< float, float > );
+
+struct a {};
+
+struct not_equal_to_object_left {};
+struct not_equal_to_object_right {};
+
+bool operator !=( not_equal_to_object_left, not_equal_to_object_right );
+
+a operator !=( not_equal_to_object_right, not_equal_to_object_left );
+
+BOOST_GENERIC_ASSERT
+( HasNotEqualTo< not_equal_to_object_left, not_equal_to_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasNotEqualTo< not_equal_to_object_left, not_equal_to_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasNotEqualTo< not_equal_to_object_right, not_equal_to_object_right > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasNotEqualTo< not_equal_to_object_right, not_equal_to_object_left > );
+
+BOOST_GENERIC_ASSERT_NOT
+( HasNotEqualTo< not_equal_to_object_right, not_equal_to_object_left > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,45 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_plus.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasPlus;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasPlus< int, int > );
+BOOST_GENERIC_ASSERT( HasPlus< short, int > );
+BOOST_GENERIC_ASSERT( HasPlus< int, float > );
+BOOST_GENERIC_ASSERT( HasPlus< double, float > );
+BOOST_GENERIC_ASSERT( HasPlus< int*, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasPlus< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasPlus< short, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasPlus< int, float >::result_type, float > );
+BOOST_GENERIC_ASSERT( SameType< HasPlus< double, float >::result_type, double > );
+BOOST_GENERIC_ASSERT( SameType< HasPlus< int*, int >::result_type, int* > );
+
+BOOST_GENERIC_ASSERT_NOT( HasPlus< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasPlus< double, int* > );
+
+struct has_plus_object
+{
+ friend void operator +( has_plus_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasPlus< has_plus_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasPlus< has_plus_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasPlus< int, has_plus_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasPlus< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasPlus< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasPlus< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_plus_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_plus_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct plus_assign_type
+{
+ a operator +=( plus_assign_type ) const;
+ b operator +=( a ) const;
+};
+
+using boost::generic::std_concept::HasPlusAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasPlusAssign< plus_assign_type, plus_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasPlusAssign< plus_assign_type, plus_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasPlusAssign< plus_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasPlusAssign< plus_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasPlusAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasPlusAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasPlusAssign< float, float > );
+BOOST_GENERIC_ASSERT( SameType< HasPlusAssign< float, float >::result_type, float& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasPlusAssign< plus_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasPlusAssign< a, b > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postdecrement.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postdecrement.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_postdecrement.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasPostdecrement;
+using boost::generic::std_concept::SameType;
+
+struct a {};
+
+struct postdecrement_type
+{
+ friend a operator--( postdecrement_type, int );
+};
+
+BOOST_GENERIC_ASSERT( HasPostdecrement< int > );
+BOOST_GENERIC_ASSERT( HasPostdecrement< postdecrement_type > );
+BOOST_GENERIC_ASSERT( SameType< HasPostdecrement< int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasPostdecrement< postdecrement_type >::result_type, a > );
+
+struct no_postdecrement_type {};
+
+struct predecrement_type
+{
+ friend predecrement_type& operator--( predecrement_type );
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasPostdecrement< no_postdecrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPostdecrement< predecrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPostdecrement< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postincrement.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_postincrement.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_postincrement.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasPostincrement;
+using boost::generic::std_concept::SameType;
+
+struct a {};
+
+struct postincrement_type
+{
+ friend a operator++( postincrement_type, int );
+};
+
+BOOST_GENERIC_ASSERT( HasPostincrement< int > );
+BOOST_GENERIC_ASSERT( HasPostincrement< postincrement_type > );
+BOOST_GENERIC_ASSERT( SameType< HasPostincrement< int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasPostincrement< postincrement_type >::result_type, a > );
+
+struct no_postincrement_type {};
+
+struct preincrement_type
+{
+ friend preincrement_type& operator++( preincrement_type );
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasPostincrement< no_postincrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPostincrement< preincrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPostincrement< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_predecrement.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_predecrement.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_predecrement.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasPredecrement;
+using boost::generic::std_concept::SameType;
+
+struct a {};
+
+struct predecrement_type
+{
+ friend predecrement_type& operator--( predecrement_type );
+};
+
+BOOST_GENERIC_ASSERT( HasPredecrement< int > );
+BOOST_GENERIC_ASSERT( HasPredecrement< predecrement_type > );
+BOOST_GENERIC_ASSERT( SameType< HasPredecrement< int >::result_type, int& > );
+BOOST_GENERIC_ASSERT( SameType< HasPredecrement< predecrement_type >::result_type, predecrement_type& > );
+
+struct no_predecrement_type {};
+
+struct postdecrement_type
+{
+ friend a operator--( predecrement_type, int );
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasPredecrement< no_predecrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPredecrement< postdecrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPredecrement< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_preincrement.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_preincrement.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,38 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_preincrement.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasPreincrement;
+using boost::generic::std_concept::SameType;
+
+struct a {};
+
+struct preincrement_type
+{
+ friend preincrement_type& operator++( preincrement_type );
+};
+
+BOOST_GENERIC_ASSERT( HasPreincrement< int > );
+BOOST_GENERIC_ASSERT( HasPreincrement< preincrement_type > );
+BOOST_GENERIC_ASSERT( SameType< HasPreincrement< int >::result_type, int& > );
+BOOST_GENERIC_ASSERT( SameType< HasPreincrement< preincrement_type >::result_type, preincrement_type& > );
+
+struct no_preincrement_type {};
+
+struct postincrement_type
+{
+ friend a operator++( preincrement_type, int );
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasPreincrement< no_preincrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPreincrement< postincrement_type > );
+BOOST_GENERIC_ASSERT_NOT( HasPreincrement< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,42 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_right_shift.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasRightShift;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasRightShift< int, int > );
+BOOST_GENERIC_ASSERT( HasRightShift< short, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasRightShift< int, int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasRightShift< short, int >::result_type, int > );
+
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< int, float > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< double, float > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< int*, int > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< int*, int* > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< double, int* > );
+
+struct has_bitand_object
+{
+ friend void operator >>( has_bitand_object, int );
+};
+
+BOOST_GENERIC_ASSERT( HasRightShift< has_bitand_object, int > );
+
+BOOST_GENERIC_ASSERT( SameType< HasRightShift< has_bitand_object, int >::result_type, void > );
+
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< int, has_bitand_object > );
+
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< double, void > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShift< void, double > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_right_shift_assign.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_right_shift_assign.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+struct a {}; struct b {};
+
+struct right_shift_assign_type
+{
+ a operator >>=( right_shift_assign_type ) const;
+ b operator >>=( a ) const;
+};
+
+using boost::generic::std_concept::HasRightShiftAssign;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasRightShiftAssign< right_shift_assign_type, right_shift_assign_type > );
+BOOST_GENERIC_ASSERT( SameType< HasRightShiftAssign< right_shift_assign_type, right_shift_assign_type >::result_type, a > );
+
+BOOST_GENERIC_ASSERT( HasRightShiftAssign< right_shift_assign_type, a > );
+BOOST_GENERIC_ASSERT( SameType< HasRightShiftAssign< right_shift_assign_type, a >::result_type, b > );
+
+BOOST_GENERIC_ASSERT( HasRightShiftAssign< int, int > );
+BOOST_GENERIC_ASSERT( SameType< HasRightShiftAssign< int, int >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT_NOT( HasRightShiftAssign< right_shift_assign_type, b > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShiftAssign< a, b > );
+BOOST_GENERIC_ASSERT_NOT( HasRightShiftAssign< float, float > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_subscript.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_subscript.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_subscript.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+#include <cstddef>
+
+using boost::generic::std_concept::HasSubscript;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasSubscript< int[], std::ptrdiff_t > );
+BOOST_GENERIC_ASSERT( SameType< HasSubscript< int[], std::ptrdiff_t >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasSubscript< int[1], std::ptrdiff_t > );
+BOOST_GENERIC_ASSERT( SameType< HasSubscript< int[1], std::ptrdiff_t >::result_type, int& > );
+
+BOOST_GENERIC_ASSERT( HasSubscript< int*, std::ptrdiff_t > );
+BOOST_GENERIC_ASSERT( SameType< HasSubscript< int*, std::ptrdiff_t >::result_type, int& > );
+
+struct subscriptable_type
+{
+ char operator []( float ) const;
+};
+
+BOOST_GENERIC_ASSERT( HasSubscript< subscriptable_type, float > );
+BOOST_GENERIC_ASSERT( SameType< HasSubscript< subscriptable_type, float >::result_type, char > );
+
+struct no_subscript_type
+{
+};
+
+BOOST_GENERIC_ASSERT_NOT( HasSubscript< no_subscript_type, float > );
+BOOST_GENERIC_ASSERT_NOT( HasSubscript< int[], float > );
+BOOST_GENERIC_ASSERT_NOT( HasSubscript< int, void > );
+BOOST_GENERIC_ASSERT_NOT( HasSubscript< void, void > );
+BOOST_GENERIC_ASSERT_NOT( HasSubscript< void, int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_swap.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_swap.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_swap.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct left_type_with_swap {};
+
+struct right_type_with_swap {};
+
+char swap( left_type_with_swap, right_type_with_swap );
+
+using boost::generic::std_concept::HasSwap;
+
+BOOST_GENERIC_ASSERT( HasSwap< left_type_with_swap, right_type_with_swap > );
+
+BOOST_GENERIC_ASSERT_NOT( HasSwap< right_type_with_swap, left_type_with_swap > );
+
+// TODO figure out a nice way to test these
+//BOOST_GENERIC_ASSERT( HasSwap< int, int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_unary_plus.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_unary_plus.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,53 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_unary_plus.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::HasUnaryPlus;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( HasUnaryPlus< int > );
+BOOST_GENERIC_ASSERT( HasUnaryPlus< long > );
+BOOST_GENERIC_ASSERT( HasUnaryPlus< short > );
+BOOST_GENERIC_ASSERT( HasUnaryPlus< unsigned > );
+
+BOOST_GENERIC_ASSERT( SameType< HasUnaryPlus< int >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasUnaryPlus< long >::result_type, long > );
+BOOST_GENERIC_ASSERT( SameType< HasUnaryPlus< short >::result_type, int > );
+BOOST_GENERIC_ASSERT( SameType< HasUnaryPlus< unsigned >::result_type, unsigned > );
+
+struct non_unary_plus_object {};
+
+BOOST_GENERIC_ASSERT_NOT( HasUnaryPlus< non_unary_plus_object > );
+
+struct unary_plus_result {};
+
+struct unary_plus_object
+{
+ unary_plus_result operator +() const;
+};
+
+BOOST_GENERIC_ASSERT( HasUnaryPlus< unary_plus_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType
+ < HasUnaryPlus< unary_plus_object >::result_type, unary_plus_result >
+);
+
+struct unary_plus_void_object
+{
+ void operator +() const;
+};
+
+BOOST_GENERIC_ASSERT( HasUnaryPlus< unary_plus_void_object > );
+
+BOOST_GENERIC_ASSERT
+( SameType< HasUnaryPlus< unary_plus_void_object >::result_type, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/has_virtual_destructor.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/has_virtual_destructor.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/has_virtual_destructor.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct nonvirtual_destructor_type {};
+
+struct virtual_destructor_type
+{
+ virtual ~virtual_destructor_type();
+};
+
+using boost::generic::std_concept::HasVirtualDestructor;
+
+BOOST_GENERIC_ASSERT( HasVirtualDestructor< virtual_destructor_type > );
+
+BOOST_GENERIC_ASSERT_NOT( HasVirtualDestructor< int > );
+BOOST_GENERIC_ASSERT_NOT( HasVirtualDestructor< void > );
+BOOST_GENERIC_ASSERT_NOT( HasVirtualDestructor< int() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/identity_of.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/identity_of.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/identity_of.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::IdentityOf;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< int >::type, int > );
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< void >::type, void > );
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< int& >::type, int& > );
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< char() >::type, char() > );
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< int[] >::type, int[] > );
+
+struct foo;
+BOOST_GENERIC_ASSERT( SameType< IdentityOf< foo >::type, foo > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/integral_like.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/integral_like.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/integral_like.hpp>
+
+#include <boost/generic/assert.hpp>
+
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< signed char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< long long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< unsigned char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< unsigned short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< unsigned long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::IntegralLike< unsigned long long int > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::IntegralLike< float > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::IntegralLike< double > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::IntegralLike< long double > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::IntegralLike< void > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::IntegralLike< char* > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/less_than_comparable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/less_than_comparable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/less_than_comparable.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::LessThanComparable;
+
+BOOST_GENERIC_ASSERT( LessThanComparable< int > );
+BOOST_GENERIC_ASSERT( LessThanComparable< int* > );
+BOOST_GENERIC_ASSERT( LessThanComparable< void* > );
+BOOST_GENERIC_ASSERT( LessThanComparable< float > );
+
+struct less_than_comparable_type {};
+
+bool operator <( less_than_comparable_type, less_than_comparable_type );
+bool operator <=( less_than_comparable_type, less_than_comparable_type );
+bool operator >( less_than_comparable_type, less_than_comparable_type );
+bool operator >=( less_than_comparable_type, less_than_comparable_type );
+
+BOOST_GENERIC_ASSERT( LessThanComparable< less_than_comparable_type > );
+
+struct not_less_than_comparable_type {};
+
+bool operator <( not_less_than_comparable_type, not_less_than_comparable_type );
+void operator <=( not_less_than_comparable_type, not_less_than_comparable_type );
+bool operator >( not_less_than_comparable_type, not_less_than_comparable_type );
+bool operator >=( not_less_than_comparable_type, not_less_than_comparable_type );
+
+BOOST_GENERIC_ASSERT_NOT( LessThanComparable< not_less_than_comparable_type > );
+BOOST_GENERIC_ASSERT_NOT( LessThanComparable< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/lvalue_reference.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/lvalue_reference.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,20 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/lvalue_reference.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::LvalueReference;
+
+BOOST_GENERIC_ASSERT( LvalueReference< int& > );
+BOOST_GENERIC_ASSERT( LvalueReference< int const& > );
+
+BOOST_GENERIC_ASSERT_NOT( LvalueReference< void > );
+BOOST_GENERIC_ASSERT_NOT( LvalueReference< int > );
+BOOST_GENERIC_ASSERT_NOT( LvalueReference< int&& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/move_assignable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/move_assignable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/move_assignable.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct nonmove_assignable_type
+{
+private:
+ nonmove_assignable_type& operator =( nonmove_assignable_type&& ) = delete;
+};
+
+using boost::generic::std_concept::MoveAssignable;
+
+BOOST_GENERIC_ASSERT( MoveAssignable< int > );
+
+BOOST_GENERIC_ASSERT_NOT( MoveAssignable< nonmove_assignable_type > );
+BOOST_GENERIC_ASSERT_NOT( MoveAssignable< void > );
+

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/move_constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/move_constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/move_constructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct nonmovable_type
+{
+private:
+ nonmovable_type( nonmovable_type&& ) = delete;
+};
+
+using boost::generic::std_concept::MoveConstructible;
+
+BOOST_GENERIC_ASSERT( MoveConstructible< int > );
+
+BOOST_GENERIC_ASSERT_NOT( MoveConstructible< nonmovable_type > );
+BOOST_GENERIC_ASSERT_NOT( MoveConstructible< void > );
+

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/nothrow_destructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/nothrow_destructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/nothrow_destructible.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/predicate.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/predicate.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,40 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/predicate.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <functional>
+
+using boost::generic::std_concept::Predicate;
+
+BOOST_GENERIC_ASSERT( Predicate< bool(int,float,char*), int, float, char* > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< bool(int,float,char*), int, float, void > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< void(int,float,char*), int, float, char > );
+
+struct not_convertible_to_bool {};
+
+struct predicate_type
+{
+ bool operator ()() const;
+ bool operator ()( int, int, int, int ) const;
+ not_convertible_to_bool operator ()( float, float, float, float ) const;
+};
+
+BOOST_GENERIC_ASSERT( Predicate< std::less< int >, int, int > );
+BOOST_GENERIC_ASSERT( Predicate< predicate_type > );
+BOOST_GENERIC_ASSERT( Predicate< predicate_type, int, int, int, int > );
+
+
+BOOST_GENERIC_ASSERT_NOT( Predicate< predicate_type, float, float, float, float > );
+
+BOOST_GENERIC_ASSERT_NOT( Predicate< void > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< void, void > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< void, int > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< int, void > );
+BOOST_GENERIC_ASSERT_NOT( Predicate< predicate_type, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/regular.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/regular.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,30 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/regular.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct regular_type
+{
+ friend bool operator ==( regular_type, regular_type );
+ friend bool operator !=( regular_type, regular_type );
+};
+
+using boost::generic::std_concept::Regular;
+
+BOOST_GENERIC_ASSERT( Regular< int > );
+BOOST_GENERIC_ASSERT( Regular< char* > );
+BOOST_GENERIC_ASSERT( Regular< void* > );
+
+BOOST_GENERIC_ASSERT( Regular< regular_type > );
+
+BOOST_GENERIC_ASSERT_NOT( Regular< int& > );
+BOOST_GENERIC_ASSERT_NOT( Regular< void > );
+BOOST_GENERIC_ASSERT_NOT( Regular< int[4] > );
+BOOST_GENERIC_ASSERT_NOT( Regular< int() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_of.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_of.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/rvalue_of.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+using boost::generic::std_concept::RvalueOf;
+using boost::generic::std_concept::SameType;
+
+BOOST_GENERIC_ASSERT( RvalueOf< int > );
+BOOST_GENERIC_ASSERT( SameType< RvalueOf< int >::type, int&& > );
+
+BOOST_GENERIC_ASSERT( RvalueOf< int const > );
+BOOST_GENERIC_ASSERT( SameType< RvalueOf< int const >::type, int const&& > );
+
+BOOST_GENERIC_ASSERT( RvalueOf< int& > );
+BOOST_GENERIC_ASSERT( SameType< RvalueOf< int& >::type, int& > );
+
+BOOST_GENERIC_ASSERT( RvalueOf< int&& > );
+BOOST_GENERIC_ASSERT( SameType< RvalueOf< int&& >::type, int&& > );
+
+BOOST_GENERIC_ASSERT( RvalueOf< int const&& > );
+BOOST_GENERIC_ASSERT( SameType< RvalueOf< int const&& >::type, int const&& > );
+
+BOOST_GENERIC_ASSERT_NOT( RvalueOf< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_reference.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/rvalue_reference.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,20 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/rvalue_reference.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::RvalueReference;
+
+BOOST_GENERIC_ASSERT( RvalueReference< int&& > );
+BOOST_GENERIC_ASSERT( RvalueReference< int const&& > );
+
+BOOST_GENERIC_ASSERT_NOT( RvalueReference< void > );
+BOOST_GENERIC_ASSERT_NOT( RvalueReference< int > );
+BOOST_GENERIC_ASSERT_NOT( RvalueReference< int& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/semiregular.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/semiregular.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/semiregular.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::Semiregular;
+
+BOOST_GENERIC_ASSERT( Semiregular< int > );
+BOOST_GENERIC_ASSERT( Semiregular< char* > );
+BOOST_GENERIC_ASSERT( Semiregular< void* > );
+
+struct semiregular_type {};
+
+BOOST_GENERIC_ASSERT( Semiregular< semiregular_type > );
+
+struct not_semiregular_type
+{
+ int operator =( not_semiregular_type& );
+};
+
+BOOST_GENERIC_ASSERT_NOT( Semiregular< not_semiregular_type > );
+
+BOOST_GENERIC_ASSERT_NOT( Semiregular< int& > );
+BOOST_GENERIC_ASSERT_NOT( Semiregular< void > );
+BOOST_GENERIC_ASSERT_NOT( Semiregular< int[4] > );
+BOOST_GENERIC_ASSERT_NOT( Semiregular< int() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/signed_integral_like.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/signed_integral_like.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,29 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/signed_integral_like.hpp>
+
+#include <boost/generic/assert.hpp>
+
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::SignedIntegralLike< signed char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::SignedIntegralLike< short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::SignedIntegralLike< int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::SignedIntegralLike< long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::SignedIntegralLike< long long int > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< unsigned char > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< unsigned short int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< unsigned int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< unsigned long int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< unsigned long long int > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< float > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< double > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< long double > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::SignedIntegralLike< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/strict_weak_order.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/strict_weak_order.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,49 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/strict_weak_order.hpp>
+
+#include <boost/generic/assert.hpp>
+#include <functional>
+
+using boost::generic::std_concept::StrictWeakOrder;
+
+BOOST_GENERIC_ASSERT( StrictWeakOrder< bool(int, int), int > );
+BOOST_GENERIC_ASSERT( StrictWeakOrder< bool(&)(int, int), int > );
+BOOST_GENERIC_ASSERT( StrictWeakOrder< bool(*)(int, int), int > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< void(int, int), int > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< bool(int, int), void > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< bool(int, int), char* > );
+
+BOOST_GENERIC_ASSERT( StrictWeakOrder< std::less< int >, int > );
+BOOST_GENERIC_ASSERT( StrictWeakOrder< std::greater< int >, int > );
+BOOST_GENERIC_ASSERT( StrictWeakOrder< std::greater_equal< int >, int > );
+BOOST_GENERIC_ASSERT( StrictWeakOrder< std::less_equal< int >, int > );
+
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< std::less< int >, char* > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< std::greater< int >, char* > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< std::greater_equal< int >, char* > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< std::less_equal< int >, char* > );
+
+struct strict_weak_order_type
+{
+ bool operator ()( int, int ) const;
+};
+
+BOOST_GENERIC_ASSERT( StrictWeakOrder< strict_weak_order_type, int > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< strict_weak_order_type, void* > );
+
+struct not_strict_weak_order_type
+{
+ void operator ()( int, int ) const;
+};
+
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< not_strict_weak_order_type, int > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< void, void > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< void, int > );
+BOOST_GENERIC_ASSERT_NOT( StrictWeakOrder< int, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/swappable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/swappable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/swappable.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct swappable_type {};
+
+char swap( swappable_type, swappable_type );
+
+using boost::generic::std_concept::Swappable;
+
+BOOST_GENERIC_ASSERT( Swappable< swappable_type > );
+
+BOOST_GENERIC_ASSERT_NOT( Swappable< void > );
+BOOST_GENERIC_ASSERT_NOT( Swappable< int() > );
+
+// TODO figure out a nice way to test these
+//BOOST_GENERIC_ASSERT( Swappable< int, int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_assignable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_assignable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/trivially_copy_assignable.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct copy_assignable_type {};
+
+struct default_copy_assignable_type
+{
+ default_copy_assignable_type& operator=( default_copy_assignable_type const& )
+ = default;
+};
+
+struct nontrivial_copy_assignable_type
+{
+ nontrivial_copy_assignable_type&
+ operator=( nontrivial_copy_assignable_type const& );
+};
+
+struct noncopy_assignable_type
+{
+ noncopy_assignable_type& operator=( noncopy_assignable_type const& ) = delete;
+};
+
+using boost::generic::std_concept::TriviallyCopyAssignable;
+
+BOOST_GENERIC_ASSERT( TriviallyCopyAssignable< int > );
+BOOST_GENERIC_ASSERT( TriviallyCopyAssignable< copy_assignable_type > );
+BOOST_GENERIC_ASSERT( TriviallyCopyAssignable< default_copy_assignable_type > );
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< nontrivial_copy_assignable_type > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< int& > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< noncopy_assignable_type > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< int() > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< int[] > );
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyAssignable< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_copy_constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,50 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/trivially_copy_constructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+struct trivially_copy_constructible_type {};
+
+struct trivially_copy_constructible_reference_member_type
+{
+ int& foo;
+};
+
+struct default_trivially_copy_constructible_type
+{
+ default_trivially_copy_constructible_type
+ ( default_trivially_copy_constructible_type const& ) = default;
+};
+
+struct noncopy_constructible_type
+{
+ noncopy_constructible_type( noncopy_constructible_type const& )
+ = delete;
+};
+
+struct nontrivially_copy_constructible_type
+{
+ nontrivially_copy_constructible_type( nontrivially_copy_constructible_type const& );
+};
+
+using boost::generic::std_concept::TriviallyCopyConstructible;
+
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< int > );
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< int[4] > );
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< int& > ); // TODO figure out if this should fail
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< trivially_copy_constructible_reference_member_type > ); // TODO figure out if this should fail
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< trivially_copy_constructible_type > );
+BOOST_GENERIC_ASSERT( TriviallyCopyConstructible< default_trivially_copy_constructible_type > );
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyConstructible< noncopy_constructible_type > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyConstructible< nontrivially_copy_constructible_type > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyConstructible< int[] > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyConstructible< int() > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyCopyConstructible< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_default_constructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_default_constructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/trivially_default_constructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::TriviallyDefaultConstructible;
+
+BOOST_GENERIC_ASSERT( TriviallyDefaultConstructible< int > );
+BOOST_GENERIC_ASSERT( TriviallyDefaultConstructible< int* > );
+//BOOST_GENERIC_ASSERT( TriviallyDefaultConstructible< int[4] > ); // TODO figure out if this should succeed
+
+struct trivially_constructible {};
+struct default_trivially_constructible
+{
+ default_trivially_constructible() = default;
+};
+
+BOOST_GENERIC_ASSERT( TriviallyDefaultConstructible< trivially_constructible > );
+BOOST_GENERIC_ASSERT( TriviallyDefaultConstructible< default_trivially_constructible > );
+
+struct not_trivially_constructible
+{
+ not_trivially_constructible();
+};
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyDefaultConstructible< not_trivially_constructible > );
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyDefaultConstructible< int& > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyDefaultConstructible< int() > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyDefaultConstructible< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_destructible.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/trivially_destructible.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,37 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/trivially_destructible.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::TriviallyDestructible;
+
+BOOST_GENERIC_ASSERT( TriviallyDestructible< int > );
+BOOST_GENERIC_ASSERT( TriviallyDestructible< int* > );
+BOOST_GENERIC_ASSERT( TriviallyDestructible< int& > );
+// BOOST_GENERIC_ASSERT( TriviallyDestructible< int[4] > ); // TODO Figure out if this should actually succeed
+
+struct trivially_destructible {};
+struct default_trivially_destructible
+{
+ ~default_trivially_destructible() = default;
+};
+
+BOOST_GENERIC_ASSERT( TriviallyDestructible< trivially_destructible > );
+BOOST_GENERIC_ASSERT( TriviallyDestructible< default_trivially_destructible > );
+
+struct not_trivially_destructible
+{
+ ~not_trivially_destructible();
+};
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyDestructible< not_trivially_destructible > );
+
+BOOST_GENERIC_ASSERT_NOT( TriviallyDestructible< int() > );
+BOOST_GENERIC_ASSERT_NOT( TriviallyDestructible< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/true.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/true.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,16 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/true.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::True;
+
+BOOST_GENERIC_ASSERT( True< true > );
+BOOST_GENERIC_ASSERT_NOT( True< false > );

Added: sandbox/generic/test/libs/generic/test/std_concept/concepts/unsigned_integral_like.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/concepts/unsigned_integral_like.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,29 @@
+/*==============================================================================
+ Copyright (c) 2011 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/concepts/unsigned_integral_like.hpp>
+
+#include <boost/generic/assert.hpp>
+
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::UnsignedIntegralLike< unsigned char > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::UnsignedIntegralLike< unsigned short int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::UnsignedIntegralLike< unsigned int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::UnsignedIntegralLike< unsigned long int > );
+BOOST_GENERIC_ASSERT( boost::generic::std_concept::UnsignedIntegralLike< unsigned long long int > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< signed char > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< signed short int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< signed int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< signed long int > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< signed long long int > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< float > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< double > );
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< long double > );
+
+BOOST_GENERIC_ASSERT_NOT( boost::generic::std_concept::UnsignedIntegralLike< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/back_emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/back_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/back_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/front_emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/front_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/front_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_back_emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_back_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_back_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,36 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_container.hpp>
+
+#include <boost/generic/assert.hpp>
+
+//#include <array>
+//#include <deque>
+//#include <forward_list>
+//#include <list>
+//#include <queue>
+//#include <stack>
+//#include <vector>
+//#include <map>
+//#include <set>
+//#include <unordered_map>
+//#include <unordered_set>
+//
+//using boost::generic::std_concept::MemberContainer;
+//
+//struct not_a_member_container {};
+//
+//BOOST_GENERIC_ASSERT_NOT( MemberContainer<int> );
+//BOOST_GENERIC_ASSERT_NOT( MemberContainer<int*> );
+//BOOST_GENERIC_ASSERT_NOT( MemberContainer<void> );
+//BOOST_GENERIC_ASSERT_NOT( MemberContainer<not_a_member_container> );
+//
+//BOOST_GENERIC_ASSERT( MemberContainer< std::array<int, 42> > );
+
+//BOOST_GENERIC_ASSERT( MemberContainer<

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_emplacement_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_emplacement_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_front_emplacement_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_front_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_front_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_queue_like_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_queue_like_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_queue_like_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_range_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_range_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_range_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_stack_like_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/member_stack_like_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/member_stack_like_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/queue_like_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/queue_like_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/queue_like_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/range_insertion_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/range_insertion_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/range_insertion_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/container_concepts/stack_like_container.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/container_concepts/stack_like_container.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/container_concepts/stack_like_container.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/bidirectional_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/bidirectional_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/bidirectional_iterator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/forward_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/forward_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/forward_iterator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/input_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/input_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/input_iterator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,28 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/iterator.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::Iterator;
+
+BOOST_GENERIC_ASSERT_NOT( Iterator< int > );
+BOOST_GENERIC_ASSERT( Iterator< int* > );
+
+//#include <array>
+//#include <vector>
+//#include <deque>
+//
+//BOOST_GENERIC_ASSERT( Iterator< std::array< int, 10 >::iterator > );
+//BOOST_GENERIC_ASSERT( Iterator< std::array< int, 10 >::const_iterator > );
+//BOOST_GENERIC_ASSERT( Iterator< std::vector< int >::iterator > );
+//BOOST_GENERIC_ASSERT( Iterator< std::vector< int >::const_iterator > );
+//BOOST_GENERIC_ASSERT( Iterator< std::deque< int >::iterator > );
+//BOOST_GENERIC_ASSERT( Iterator< std::deque< int >::const_iterator > );
+//

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/output_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/output_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/output_iterator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/random_access_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/random_access_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,15 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/random_access_iterator.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::RandomAccessIterator;
+
+//BOOST_GENERIC_ASSERT( RandomAccessIterator< int* > );

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/range.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/range.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/range.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/shuffle_iterator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/iterator_concepts/shuffle_iterator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/iterator_concepts/shuffle_iterator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocatable_element.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocatable_element.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,10 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocatable_element.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/allocator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,10 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/memory_concepts/allocator.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/constructible_with_allocator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/constructible_with_allocator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/memory_concepts/constructible_with_allocator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/has_allocator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/has_allocator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,10 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/memory_concepts/has_allocator.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/legacy_allocator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/legacy_allocator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,10 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/assert.hpp>
+#include <boost/generic/std_concept/memory_concepts/legacy_allocator.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/uses_allocator.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/memory_concepts/uses_allocator.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,11 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/memory_concepts/uses_allocator.hpp>
+
+#include <boost/generic/assert.hpp>

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/arithmetic_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/arithmetic_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,31 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/arithmetic_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ArithmeticType;
+
+BOOST_GENERIC_ASSERT( ArithmeticType< float > );
+BOOST_GENERIC_ASSERT( ArithmeticType< double > );
+BOOST_GENERIC_ASSERT( ArithmeticType< long double > );
+BOOST_GENERIC_ASSERT( ArithmeticType< signed char > );
+BOOST_GENERIC_ASSERT( ArithmeticType< short int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< long int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< long long int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< unsigned char > );
+BOOST_GENERIC_ASSERT( ArithmeticType< unsigned short int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< unsigned long int > );
+BOOST_GENERIC_ASSERT( ArithmeticType< unsigned long long int > );
+
+struct not_arithmetic_like {};
+
+BOOST_GENERIC_ASSERT_NOT( ArithmeticType< not_arithmetic_like > );
+BOOST_GENERIC_ASSERT_NOT( ArithmeticType< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/class.hpp>
+
+#include <boost/generic/assert.hpp>
+
+class class_type;
+struct struct_type;
+
+using boost::generic::std_concept::Class;
+
+BOOST_GENERIC_ASSERT( Class< class_type > );
+BOOST_GENERIC_ASSERT( Class< struct_type > );
+
+union union_type
+{
+ int a;
+ float b;
+};
+
+BOOST_GENERIC_ASSERT_NOT( Class< int > );
+BOOST_GENERIC_ASSERT_NOT( Class< union_type > );
+BOOST_GENERIC_ASSERT_NOT( Class< void > );
+BOOST_GENERIC_ASSERT_NOT( Class< int[] > );
+BOOST_GENERIC_ASSERT_NOT( Class< class_type() > );
+BOOST_GENERIC_ASSERT_NOT( Class< class_type& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/class_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/class_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+class class_type;
+struct struct_type;
+
+using boost::generic::std_concept::ClassType;
+
+union union_type
+{
+ int a;
+ float b;
+};
+
+BOOST_GENERIC_ASSERT( ClassType< class_type > );
+BOOST_GENERIC_ASSERT( ClassType< struct_type > );
+BOOST_GENERIC_ASSERT( ClassType< union_type > );
+
+BOOST_GENERIC_ASSERT_NOT( ClassType< int > );
+BOOST_GENERIC_ASSERT_NOT( ClassType< void > );
+BOOST_GENERIC_ASSERT_NOT( ClassType< int[] > );
+BOOST_GENERIC_ASSERT_NOT( ClassType< class_type() > );
+BOOST_GENERIC_ASSERT_NOT( ClassType< class_type& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/derived_from.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/derived_from.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,44 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/derived_from.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::DerivedFrom;
+
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< int, int > );
+
+struct simple_type {};
+
+BOOST_GENERIC_ASSERT( DerivedFrom< simple_type, simple_type > );
+
+struct public_base_type {};
+struct private_base_type {};
+struct protected_base_type {};
+
+struct left_base_type : public_base_type {};
+struct right_base_type : public_base_type {};
+
+struct derived_from_type : public_base_type {};
+struct private_derived_from_type : private public_base_type {};
+struct protected_derived_from_type : protected public_base_type {};
+
+struct ambiguous_derived_from_type : left_base_type, right_base_type {};
+
+struct private_public_derived_from_type : left_base_type, private right_base_type {};
+
+BOOST_GENERIC_ASSERT( DerivedFrom< derived_from_type, public_base_type > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< private_derived_from_type, public_base_type > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< protected_derived_from_type, public_base_type > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< ambiguous_derived_from_type, public_base_type > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< private_public_derived_from_type, public_base_type > );
+
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< void, public_base_type > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< private_public_derived_from_type, void > );
+BOOST_GENERIC_ASSERT_NOT( DerivedFrom< void, void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/enumeration_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/enumeration_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+// TODO uncomment this
+//#include <boost/generic/std_concept/support_concepts/enumeration_type.hpp>
+//
+//#include <boost/generic/assert.hpp>
+//
+//using boost::generic::std_concept::EnumerationType;
+//
+//enum enumeration_type { a = 1 };
+//
+//BOOST_GENERIC_ASSERT( EnumerationType< enumeration_type > );
+//BOOST_GENERIC_ASSERT( SameType< EnumerationType< enumeration_type >::underlying_type, int > );
+//
+//BOOST_GENERIC_ASSERT_NOT( EnumerationType< enumeration_type* > );
+//BOOST_GENERIC_ASSERT_NOT( EnumerationType< void > );
+//BOOST_GENERIC_ASSERT_NOT( EnumerationType< int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/floating_point_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/floating_point_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/floating_point_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::FloatingPointType;
+
+BOOST_GENERIC_ASSERT( FloatingPointType< float > );
+BOOST_GENERIC_ASSERT( FloatingPointType< double > );
+BOOST_GENERIC_ASSERT( FloatingPointType< long double > );
+
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< char > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< unsigned char > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< signed char > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< int > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< short > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< long > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< long long > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< unsigned > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< unsigned short > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< unsigned long > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< unsigned long long > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< bool > );
+
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< void > );
+BOOST_GENERIC_ASSERT_NOT( FloatingPointType< char* > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_constant_expression_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_constant_expression_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,31 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/integral_constant_expression_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::IntegralConstantExpressionType;
+
+BOOST_GENERIC_ASSERT( IntegralConstantExpressionType< int > );
+BOOST_GENERIC_ASSERT( IntegralConstantExpressionType< char > );
+BOOST_GENERIC_ASSERT( IntegralConstantExpressionType< bool > );
+
+enum integral_constant_expression_type { foo = 1 };
+
+BOOST_GENERIC_ASSERT( IntegralConstantExpressionType< integral_constant_expression_type > );
+
+struct not_integral_constant_expression_type {};
+
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< not_integral_constant_expression_type > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< void > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< float > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< int* > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< int[] > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< int() > );
+BOOST_GENERIC_ASSERT_NOT( IntegralConstantExpressionType< int& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/integral_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/integral_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::IntegralType;
+
+BOOST_GENERIC_ASSERT( IntegralType< char > );
+BOOST_GENERIC_ASSERT( IntegralType< unsigned char > );
+BOOST_GENERIC_ASSERT( IntegralType< signed char > );
+BOOST_GENERIC_ASSERT( IntegralType< int > );
+BOOST_GENERIC_ASSERT( IntegralType< short > );
+BOOST_GENERIC_ASSERT( IntegralType< long > );
+BOOST_GENERIC_ASSERT( IntegralType< long long > );
+BOOST_GENERIC_ASSERT( IntegralType< unsigned > );
+BOOST_GENERIC_ASSERT( IntegralType< unsigned short > );
+BOOST_GENERIC_ASSERT( IntegralType< unsigned long > );
+BOOST_GENERIC_ASSERT( IntegralType< unsigned long long > );
+BOOST_GENERIC_ASSERT( IntegralType< bool > );
+
+BOOST_GENERIC_ASSERT_NOT( IntegralType< float > );
+BOOST_GENERIC_ASSERT_NOT( IntegralType< double > );
+BOOST_GENERIC_ASSERT_NOT( IntegralType< long double > );
+BOOST_GENERIC_ASSERT_NOT( IntegralType< char* > );
+BOOST_GENERIC_ASSERT_NOT( IntegralType< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/literal_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/literal_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/literal_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::LiteralType;

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/member_pointee_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/member_pointee_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/member_pointee_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::MemberPointeeType;
+
+BOOST_GENERIC_ASSERT( MemberPointeeType< int > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int* > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int const volatile > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int() > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int() const > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int[4] > );
+BOOST_GENERIC_ASSERT( MemberPointeeType< int[] > );
+
+BOOST_GENERIC_ASSERT_NOT( MemberPointeeType< void > );
+BOOST_GENERIC_ASSERT_NOT( MemberPointeeType< int& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/non_type_template_parameter_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/non_type_template_parameter_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,35 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/non_type_template_parameter_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::NonTypeTemplateParameterType;
+
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< int > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< bool > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< char > );
+
+enum enum_type { a = 0 };
+
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< enum_type > );
+
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< void* > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< int* > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< int(*)() > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< int& > );
+BOOST_GENERIC_ASSERT( NonTypeTemplateParameterType< int(&)() > );
+
+struct struct_type {};
+
+BOOST_GENERIC_ASSERT_NOT( NonTypeTemplateParameterType< void > );
+BOOST_GENERIC_ASSERT_NOT( NonTypeTemplateParameterType< float > );
+BOOST_GENERIC_ASSERT_NOT( NonTypeTemplateParameterType< struct_type > );
+BOOST_GENERIC_ASSERT_NOT( NonTypeTemplateParameterType< int[] > );
+BOOST_GENERIC_ASSERT_NOT( NonTypeTemplateParameterType< int[4] > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/object_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/object_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,27 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/object_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ObjectType;
+
+BOOST_GENERIC_ASSERT( ObjectType< int > );
+BOOST_GENERIC_ASSERT( ObjectType< char > );
+BOOST_GENERIC_ASSERT( ObjectType< int* > );
+BOOST_GENERIC_ASSERT( ObjectType< int[] > );
+BOOST_GENERIC_ASSERT( ObjectType< int[2] > );
+
+struct object_type {};
+
+BOOST_GENERIC_ASSERT( ObjectType< object_type > );
+
+BOOST_GENERIC_ASSERT_NOT( ObjectType< int& > );
+BOOST_GENERIC_ASSERT_NOT( ObjectType< void > );
+BOOST_GENERIC_ASSERT_NOT( ObjectType< int() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/pointee_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/pointee_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,24 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/pointee_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::PointeeType;
+
+struct struct_type {};
+
+BOOST_GENERIC_ASSERT( PointeeType< struct_type > );
+BOOST_GENERIC_ASSERT( PointeeType< int > );
+BOOST_GENERIC_ASSERT( PointeeType< void > );
+BOOST_GENERIC_ASSERT( PointeeType< int[4] > );
+BOOST_GENERIC_ASSERT( PointeeType< int() > );
+
+BOOST_GENERIC_ASSERT_NOT( PointeeType< int& > );
+BOOST_GENERIC_ASSERT_NOT( PointeeType< int&& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/polymorphic_class.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/polymorphic_class.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,25 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/polymorphic_class.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::PolymorphicClass;
+
+struct polymorphic_class { virtual void foo(); };
+struct other_polymorphic_class : polymorphic_class {};
+
+BOOST_GENERIC_ASSERT( PolymorphicClass< polymorphic_class > );
+BOOST_GENERIC_ASSERT( PolymorphicClass< other_polymorphic_class > );
+
+struct nonpolymorphic_class {};
+
+BOOST_GENERIC_ASSERT_NOT( PolymorphicClass< nonpolymorphic_class > );
+BOOST_GENERIC_ASSERT_NOT( PolymorphicClass< int > );
+BOOST_GENERIC_ASSERT_NOT( PolymorphicClass< void > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/referent_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/referent_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/referent_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ReferentType;

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/returnable.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/returnable.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/returnable.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::Returnable;

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/same_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/same_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,23 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/same_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::SameType;
+
+struct a {};
+
+BOOST_GENERIC_ASSERT( SameType< int, int > );
+BOOST_GENERIC_ASSERT( SameType< a, a > );
+BOOST_GENERIC_ASSERT( SameType< void, void > );
+
+BOOST_GENERIC_ASSERT_NOT( SameType< void, void* > );
+BOOST_GENERIC_ASSERT_NOT( SameType< int, a > );
+BOOST_GENERIC_ASSERT_NOT( SameType< int, const int > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/scalar_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/scalar_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,33 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/scalar_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ScalarType;
+
+BOOST_GENERIC_ASSERT( ScalarType< int > );
+BOOST_GENERIC_ASSERT( ScalarType< char > );
+BOOST_GENERIC_ASSERT( ScalarType< float > );
+BOOST_GENERIC_ASSERT( ScalarType< int* > );
+
+struct struct_type {};
+
+BOOST_GENERIC_ASSERT( ScalarType< int(struct_type::*) > );
+BOOST_GENERIC_ASSERT( ScalarType< int(struct_type::*)() > );
+
+enum enumeration_type { a = 0 };
+
+BOOST_GENERIC_ASSERT( ScalarType< enumeration_type > );
+
+BOOST_GENERIC_ASSERT_NOT( ScalarType< void > );
+BOOST_GENERIC_ASSERT_NOT( ScalarType< void() > );
+BOOST_GENERIC_ASSERT_NOT( ScalarType< int& > );
+BOOST_GENERIC_ASSERT_NOT( ScalarType< int[4] > );
+BOOST_GENERIC_ASSERT_NOT( ScalarType< int[] > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/standard_layout_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/standard_layout_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/standard_layout_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::StandardLayoutType;

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/trivial_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/trivial_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,13 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/trivial_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::TrivialType;

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/union.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/union.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,32 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/union.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::Union;
+
+union union_type
+{
+ int a;
+ float b;
+};
+
+BOOST_GENERIC_ASSERT( Union< union_type > );
+
+class class_type {};
+struct struct_type {};
+
+BOOST_GENERIC_ASSERT_NOT( Union< class_type > );
+BOOST_GENERIC_ASSERT_NOT( Union< struct_type > );
+BOOST_GENERIC_ASSERT_NOT( Union< int > );
+BOOST_GENERIC_ASSERT_NOT( Union< void > );
+BOOST_GENERIC_ASSERT_NOT( Union< int[] > );
+BOOST_GENERIC_ASSERT_NOT( Union< class_type() > );
+BOOST_GENERIC_ASSERT_NOT( Union< class_type& > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/value_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/value_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,26 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/value_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::ValueType;
+
+BOOST_GENERIC_ASSERT( ValueType< int > );
+BOOST_GENERIC_ASSERT( ValueType< int* > );
+
+struct value_type {};
+
+BOOST_GENERIC_ASSERT( ValueType< value_type > );
+
+struct not_value_type { virtual void make_abstract() = 0; };
+
+BOOST_GENERIC_ASSERT_NOT( ValueType< not_value_type > );
+BOOST_GENERIC_ASSERT_NOT( ValueType< void > );
+BOOST_GENERIC_ASSERT_NOT( ValueType< int() > );

Added: sandbox/generic/test/libs/generic/test/std_concept/support_concepts/variable_type.cpp
==============================================================================
--- (empty file)
+++ sandbox/generic/test/libs/generic/test/std_concept/support_concepts/variable_type.cpp 2012-09-27 12:38:04 EDT (Thu, 27 Sep 2012)
@@ -0,0 +1,29 @@
+/*==============================================================================
+ Copyright (c) 2011, 2012 Matt Calabrese
+
+ 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)
+==============================================================================*/
+
+#include <boost/generic/std_concept/support_concepts/variable_type.hpp>
+
+#include <boost/generic/assert.hpp>
+
+using boost::generic::std_concept::VariableType;
+
+BOOST_GENERIC_ASSERT( VariableType< int > );
+BOOST_GENERIC_ASSERT( VariableType< int[4] > );
+BOOST_GENERIC_ASSERT( VariableType< int& > );
+BOOST_GENERIC_ASSERT( VariableType< int(&)() > );
+BOOST_GENERIC_ASSERT( VariableType< int(&)[4] > );
+
+struct variable_type {};
+
+BOOST_GENERIC_ASSERT( VariableType< variable_type > );
+
+struct not_variable_type { virtual void foo() = 0; };
+
+BOOST_GENERIC_ASSERT_NOT( VariableType< not_variable_type > );
+BOOST_GENERIC_ASSERT_NOT( VariableType< void > );
+BOOST_GENERIC_ASSERT_NOT( VariableType< int() > );


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